diff options
Diffstat (limited to 'wizards/com/sun/star/wizards/web')
-rw-r--r-- | wizards/com/sun/star/wizards/web/BackgroundsDialog.py | 194 | ||||
-rw-r--r-- | wizards/com/sun/star/wizards/web/IconsDialog.py | 96 | ||||
-rw-r--r-- | wizards/com/sun/star/wizards/web/ImageListDialog.py | 211 | ||||
-rw-r--r-- | wizards/com/sun/star/wizards/web/StylePreview.py | 76 | ||||
-rw-r--r-- | wizards/com/sun/star/wizards/web/WWD_Events.py | 937 | ||||
-rw-r--r-- | wizards/com/sun/star/wizards/web/WWD_General.py | 258 | ||||
-rw-r--r-- | wizards/com/sun/star/wizards/web/WWD_Startup.py | 661 | ||||
-rw-r--r-- | wizards/com/sun/star/wizards/web/WWHID.py | 140 | ||||
-rw-r--r-- | wizards/com/sun/star/wizards/web/WebWizardConst.py | 39 | ||||
-rw-r--r-- | wizards/com/sun/star/wizards/web/WebWizardDialog.py | 713 | ||||
-rw-r--r-- | wizards/com/sun/star/wizards/web/WebWizardDialogResources.py | 298 | ||||
-rw-r--r-- | wizards/com/sun/star/wizards/web/__init__.py | 0 |
12 files changed, 3623 insertions, 0 deletions
diff --git a/wizards/com/sun/star/wizards/web/BackgroundsDialog.py b/wizards/com/sun/star/wizards/web/BackgroundsDialog.py new file mode 100644 index 000000000000..fad4a7c5c186 --- /dev/null +++ b/wizards/com/sun/star/wizards/web/BackgroundsDialog.py @@ -0,0 +1,194 @@ +from ImageListDialog import * +from WWHID import HID_BG +from common.SystemDialog import SystemDialog +from common.FileAccess import FileAccess + +class BackgroundsDialog(ImageListDialog): + + def __init__(self, xmsf, set_, resources): + super(BackgroundsDialog, self).__init__(xmsf, HID_BG, + (resources.resBackgroundsDialog, + resources.resBackgroundsDialogCaption, + resources.resOK, + resources.resCancel, + resources.resHelp, + resources.resDeselect, + resources.resOther, + resources.resCounter)) + self.sd = SystemDialog.createOpenDialog(xmsf) + self.sd.addFilter( + resources.resImages, "*.jpg;*.jpeg;*.jpe;*.gif", True) + self.sd.addFilter(resources.resAllFiles, "*.*", False) + self.settings = set_.root + self.fileAccess = FileAccess(xmsf) + #COMMENTED + #self.il.setListModel(Model(set_)) + self.il.imageSize = Size (40, 40) + #self.il.setRenderer(BGRenderer (0)) + self.build() + + ''' + trigered when the user clicks the "other" button. + opens a "file open" dialog, adds the selected + image to the list and to the web wizard configuration, + and then jumps to the new image, selecting it in the list. + @see add(String) + ''' + + def other(self): + filename = self.sd.callOpenDialog( + False, self.settings.cp_DefaultSession.cp_InDirectory) + if filename != None and filename.length > 0 and filename[0] != None: + self.settings.cp_DefaultSession.cp_InDirectory = \ + FileAccess.getParentDir(filename[0]) + i = add(filename[0]) + il.setSelected(i) + il.display(i) + + ''' + adds the given image to the image list (to the model) + and to the web wizard configuration. + @param s + @return + ''' + + def add(self, s): + #first i check the item does not already exists in the list... + i = 0 + while i < il.getListModel().getSize(): + if il.getListModel().getElementAt(i).equals(s): + return i + + i += 1 + il.getListModel().addElement(s) + try: + configView = Configuration.getConfigurationRoot( + self.xMSF, FileAccess.connectURLs( + WebWizardConst.CONFIG_PATH, "BackgroundImages"), True) + i = Configuration.getChildrenNames(configView).length + 1 + o = Configuration.addConfigNode(configView, "" + i) + Configuration.set(s, "Href", o) + Configuration.commit(configView) + except Exception, ex: + ex.printStackTrace() + + return il.getListModel().getSize() - 1 + + ''' + an ImageList Imagerenderer implemtation. + The image URL is the object given from the list model. + the image name, got from the "render" method is + the filename portion of the url. + @author rpiterman + ''' + + class BGRenderer(object): + + def __init__(self, cut_): + ImageListDialog.ImageListDialog_body() + self.cut = cut_ + + def getImageUrls(self, listItem): + if listItem != None: + sRetUrls = range(1) + sRetUrls[0] = listItem + return sRetUrls + + return None + + def render(self, _object): + if _object is None: + return "" + else: + return FileAccess.getPathFilename( + self.fileAccess.getPath(_object, None)) + + ''' + This is a list model for the image list of the + backgrounds dialog. + It takes the Backgrounds config set as an argument, + and "parses" it to a list of files: + It goes through each image in the set, and checks it: + if it is a directory it lists all image files in this directory. + if it is a file, it adds the file to the list. + @author rpiterman + ''' + + class Model(object): + ''' + constructor. </br> + see class description for a description of + the handling of the given model + @param model the configuration set of the background images. + ''' + + def __init__(self, model): + try: + i = 0 + while i < model.getSize(): + image = model.getElementAt(i) + path = self.sd.xStringSubstitution.substituteVariables( + image.cp_Href, False) + if self.fileAccess.exists(path, False): + addDir(path) + else: + remove(model.getKey(image)) + + i += 1 + except Exception, ex: + ex.printStackTrace() + + ''' + when instanciating the model, it checks if each image + exists. If it doesnot, it will be removed from + the configuration. + This is what this method does... + @param imageName + ''' + + def remove(self, imageName): + try: + conf = Configuration.getConfigurationRoot( + self.xMSF, WebWizardConst.CONFIG_PATH + "/BackgroundImages", + True) + Configuration.removeNode(conf, imageName) + except Exception, ex: + ex.printStackTrace() + + ''' + if the given url is a directory + adds the images in the given directory, + otherwise (if it is a file) adds the file to the list. + @param url + ''' + + def addDir(self, url): + if self.fileAccess.isDirectory(url): + add(self.fileAccess.listFiles(url, False)) + else: + add(url) + + ''' + adds the given filenames (urls) to + the list + @param filenames + ''' + + def add(self, filenames): + i = 0 + while i < filenames.length: + add(filenames[i]) + i += 1 + + ''' + adds the given image url to the list. + if and only if it ends with jpg, jpeg or gif + (case insensitive) + @param filename image url. + ''' + + def add(self, filename): + lcase = filename.toLowerCase() + if lcase.endsWith("jpg") or lcase.endsWith("jpeg") or \ + lcase.endsWith("gif"): + Model.this.addElement(filename) diff --git a/wizards/com/sun/star/wizards/web/IconsDialog.py b/wizards/com/sun/star/wizards/web/IconsDialog.py new file mode 100644 index 000000000000..cc9ef111dcef --- /dev/null +++ b/wizards/com/sun/star/wizards/web/IconsDialog.py @@ -0,0 +1,96 @@ +from ImageListDialog import * +from WWHID import HID_IS +from common.FileAccess import FileAccess + +''' +@author rpiterman +The dialog class for choosing an icon set. +This class simulates a model, though it does not functions really as one, +since it does not cast events. +It also implements the ImageList.ImageRenderer interface, to handle +its own objects. +''' + +class IconsDialog(ImageListDialog): + + def __init__(self, xmsf, set_, resources): + super(IconsDialog, self).__init__(xmsf, HID_IS, + (resources.resIconsDialog, + resources.resIconsDialogCaption, + resources.resOK, + resources.resCancel, + resources.resHelp, + resources.resDeselect, + resources.resOther, + resources.resCounter)) + self.htmlexpDirectory = FileAccess.getOfficePath2( + xmsf, "Gallery", "share", "") + self.icons = \ + ["firs", "prev", "next", "last", "nav", "text", "up", "down"] + self.set = set_ + self.objects = (self.set.getSize() * len(self.icons),) + + self.il.listModel = self + self.il.renderer = self + self.il.rows = 4 + self.il.cols = 8 + self.il.ImageSize = Size (20, 20) + self.il.showButtons = False + self.il.rowSelect = True + self.il.scaleImages = False + self.showDeselectButton = True + self.showOtherButton = False + self.build() + + def getIconset(self): + if getSelected() == None: + return None + else: + return self.set.getKey((getSelected()) / len(self.icons)) + + def setIconset(self, iconset): + #COMMENTED + icon = 0 #self.set.getIndexOf(self.set.getElement(iconset)) * len(self.icons) + aux = None + if icon >=0: + aux = self.objects[icon] + self.setSelected(aux) + + def getSize(self): + return self.set.getSize() * len(self.icons) + + def getElementAt(self, arg0): + return self.objects[arg0] + + def getImageUrls(self, listItem): + i = (listItem).intValue() + iset = getIconsetNum(i) + icon = getIconNum(i) + sRetUrls = range(2) + sRetUrls[0] = self.htmlexpDirectory + "/htmlexpo/" \ + + getIconsetPref(iset) + self.icons[icon] + getIconsetPostfix(iset) + sRetUrls[1] = sRetUrls[0] + return sRetUrls + + def render(self, object): + if object == None: + return "" + + i = (object).intValue() + iset = getIconsetNum(i) + return getIconset(iset).cp_Name + + def getIconsetNum(self, i): + return i / self.icons.length + + def getIconNum(self, i): + return i % self.icons.length + + def getIconsetPref(self, iconset): + return getIconset(iconset).cp_FNPrefix + + def getIconsetPostfix(self, iconset): + return getIconset(iconset).cp_FNPostfix + + def getIconset(self, i): + return self.set.getElementAt(i) diff --git a/wizards/com/sun/star/wizards/web/ImageListDialog.py b/wizards/com/sun/star/wizards/web/ImageListDialog.py new file mode 100644 index 000000000000..d34f690594d4 --- /dev/null +++ b/wizards/com/sun/star/wizards/web/ImageListDialog.py @@ -0,0 +1,211 @@ +from ui.UnoDialog2 import * +from ui.ImageList import ImageList +from common.HelpIds import HelpIds + +from com.sun.star.awt import FontDescriptor +from com.sun.star.awt.PushButtonType import OK, CANCEL, HELP, STANDARD +from com.sun.star.awt import Size + +''' +This class is a general implementation for a +dialog which displays a choice of images. +The model and the renderer are +still abstract in this class. +To use the class one should extend it, +in the constructor then set the imageList +properties (member name il) like image size, grid size, +model renderer aso, and then call "build". +This class uses a counter renderer which +gets an expression which contains %START %END %TOTAL and replaces +them with the actual numbers. +<BR/> +two buttons: "other" and "none" which are there +to enable choosing images that are not in the list and +"no image" respectivley, are optional, with default to True, +so dialogs which do not need those, should set the corresponding +members showDeselectButton and/or showOtherButton to false. +<br/> +the consturctor should recieve, among others, an Array of String resources +see constructor documentation for details. + +@author rpiterman +''' + +class ImageListDialog(UnoDialog2): + RES_TITLE = 0 + RES_LABEL = 1 + RES_OK = 2 + RES_CANCEL = 3 + RES_HELP = 4 + RES_DESELECT = 5 + RES_OTHER = 6 + RES_COUNTER = 7 + START = "%START" + END = "%END" + TOTAL = "%TOTAL" + + ''' + @param xmsf + @param resources_ a string array with the following strings : + dialog title, label text, ok, cancel, help, deselect, other. + <br/> if "deselect" and "other" are not displayed, + the array can also be shorter. but if "other" is displayed + and "deselect" not, both must be there :-( + ''' + + def __init__(self, xmsf, hid_, resources_): + super(ImageListDialog, self).__init__(xmsf) + self.hid = hid_ + self.cutFilename = 0 + self.showDeselectButton = True + self.showOtherButton = True + self.fontDescriptor1 = FontDescriptor() + self.resources = resources_ + self.il = ImageList() + self.il.counterRenderer = self.ARenderer( + self.resources[ImageListDialog.RES_COUNTER]) + + ''' + adds the controls to the dialog, depending on + the size of the image list. + This method should be called by subclasses after setting + the il ImageList member properties + ''' + + def build(self): + #set dialog properties... + ilWidth = (self.il.imageSize.Width + self.il.gap.Width) \ + * self.il.cols + self.il.gap.Width + ilHeight = (self.il.imageSize.Height + self.il.gap.Height) \ + * self.il.rows + self.il.gap.Height + dialogWidth = 6 + ilWidth + 6 + 50 + 6 + dialogHeight = 3 + 16 + 3 + (ilHeight + 8 + 14) + 6 + Helper.setUnoPropertyValues( + self.xDialogModel, + ("Closeable", + PropertyNames.PROPERTY_HEIGHT, + PropertyNames.PROPERTY_HELPURL, + "Moveable", + PropertyNames.PROPERTY_NAME, + PropertyNames.PROPERTY_POSITION_X, + PropertyNames.PROPERTY_POSITION_Y, + PropertyNames.PROPERTY_STEP, + "Title", + PropertyNames.PROPERTY_WIDTH), + (True, dialogHeight, HelpIds.getHelpIdString(self.hid), True, + "imgDialog", 59, 24, 1, + self.resources[ImageListDialog.RES_TITLE],dialogWidth)) + #Set member- FontDescriptors... + self.fontDescriptor1.Weight = 150 + PROPNAMES = ("DefaultButton", + PropertyNames.PROPERTY_HEIGHT, + PropertyNames.PROPERTY_HELPURL, + PropertyNames.PROPERTY_LABEL, + PropertyNames.PROPERTY_NAME, + PropertyNames.PROPERTY_POSITION_X, + PropertyNames.PROPERTY_POSITION_Y, + "PushButtonType", + PropertyNames.PROPERTY_TABINDEX, + PropertyNames.PROPERTY_WIDTH) + iButtonsX = 6 + ilWidth + 6 + self.btnOK = self.insertButton( + "btnOK", None, PROPNAMES, + (True, 14, HelpIds.getHelpIdString(self.hid + 3), + self.resources[ImageListDialog.RES_OK], "btnOK", + iButtonsX, 22, uno.Any("short", OK), 7, 50), self) + self.btnCancel = self.insertButton( + "btnCancel", None, PROPNAMES, + (False, 14, HelpIds.getHelpIdString(self.hid + 4), + self.resources[ImageListDialog.RES_CANCEL], "btnCancel", + iButtonsX, 41, uno.Any("short", CANCEL), 8, 50), self) + self.btnHelp = self.insertButton( + "btnHelp", None, PROPNAMES, + (False, 14, "", self.resources[ImageListDialog.RES_HELP], + "CommandButton3", iButtonsX, 71, + uno.Any("short", HELP), 9, 50), self) + if self.showOtherButton: + aux = 0 + if self.showDeselectButton: + aux = 19 + otherY = 22 + ilHeight - 14 - aux + self.btnOther = self.insertButton( + "btnOther", "other", PROPNAMES, + (False, 14, HelpIds.getHelpIdString(self.hid + 1), + self.resources[ImageListDialog.RES_OTHER], "btnOther", + iButtonsX, otherY, + uno.Any("short", STANDARD), 5, 50), self) + + if self.showDeselectButton: + deselectY = 22 + ilHeight - 14 + self.btnDeselect = self.insertButton( + "btnNoImage", "deselect", PROPNAMES, + (False, 14, HelpIds.getHelpIdString(self.hid + 2), + self.resources[ImageListDialog.RES_DESELECT], "btnNoImage", + iButtonsX, deselectY, + uno.Any("short", STANDARD), 4, 50), self) + + self.il.step = 1 + self.il.pos = Size(6, 22) + self.il.helpURL = self.hid + 5 + self.il.tabIndex = 1 + self.il.create(self) + self.lblTitle = self.insertLabel("lblTitle", + ("FontDescriptor", + PropertyNames.PROPERTY_HEIGHT, + PropertyNames.PROPERTY_LABEL, + PropertyNames.PROPERTY_NAME, + PropertyNames.PROPERTY_POSITION_X, + PropertyNames.PROPERTY_POSITION_Y, + PropertyNames.PROPERTY_STEP, + PropertyNames.PROPERTY_TABINDEX, + PropertyNames.PROPERTY_WIDTH), + (self.fontDescriptor1, 8, + self.resources[ImageListDialog.RES_LABEL], + "lblTitle", 6, 6, 1, 4, 216)) + + ''' + is called when the user clicks "none" + ''' + + def deselect(self): + self.il.setSelected(-1) + + ''' + @return the currently elected object. + ''' + + def getSelected(self): + return self.il.getSelectedObject() + + ''' + sets the currently selected object. + @param obj the object (out of the model) to be selected. + ''' + + def setSelected(self, obj): + self.il.setSelected(obj) + self.il.showSelected() + + ''' + The counter renderer, which uses a template. + The template replaces the Strings "%START", "%END" and + "%TOTAL" with the respective values. + @author rpiterman + ''' + class ARenderer(object): + + ''' + @param aTempalte a template for this renderer. + The strings %START, %END ,%TOTAL will be replaced + with the actual values. + ''' + + def __init__(self, aTemplate): + self.template = aTemplate + + def render(self, counter): + s = self.template.replace(ImageListDialog.START, "" + \ + str(counter.start)) + s = s.replace(ImageListDialog.END, "" + str(counter.end)) + s = s.replace(ImageListDialog.TOTAL, "" + str(counter.max)) + return s diff --git a/wizards/com/sun/star/wizards/web/StylePreview.py b/wizards/com/sun/star/wizards/web/StylePreview.py new file mode 100644 index 000000000000..1ad6f9561cda --- /dev/null +++ b/wizards/com/sun/star/wizards/web/StylePreview.py @@ -0,0 +1,76 @@ +from common.FileAccess import FileAccess +import traceback + +''' +@author rpiterman +the style preview, which is a OOo Document Preview in +an Image Control. +This class copies the files needed for this +preview from the web wizard work directory +to a given temporary directory, and updates them +on request, according to the current style/background selection +of the user. +''' + +class StylePreview(object): + + ''' + copies the html file to the temp directory, and calculates the + destination names of the background and css files. + @param wwRoot is the root directory of the web wizard files ( + usually [oo]/share/template/[lang]/wizard/web + ''' + + def __init__(self, xmsf, wwRoot_): + self.fileAccess = FileAccess(xmsf) + self.tempDir = self.createTempDir(xmsf) + self.htmlFilename = FileAccess.connectURLs( + self.tempDir, "wwpreview.html") + self.cssFilename = FileAccess.connectURLs(self.tempDir, "style.css") + self.backgroundFilename = FileAccess.connectURLs( + self.tempDir, "images/background.gif") + self.wwRoot = wwRoot_ + self.fileAccess.copy(FileAccess.connectURLs( + self.wwRoot, "preview.html"), self.htmlFilename) + + ''' + copies the given style and background files to the temporary + directory. + @param style + @param background + @throws Exception + ''' + + def refresh(self, style, background): + css = FileAccess.connectURLs(self.wwRoot, "styles/" + style.cp_CssHref) + if background is None or background == "": + #delete the background image + if self.fileAccess.exists(self.backgroundFilename, False): + self.fileAccess.delete(self.backgroundFilename) + else: + # a solaris bug workaround + # TODO + #copy the background image to the temp directory. + self.fileAccess.copy(background, self.backgroundFilename) + + #copy the actual css to the temp directory + self.fileAccess.copy(css, self.cssFilename) + + def cleanup(self): + try: + self.fileAccess.delete(self.tempDir) + except Exception: + traceback.print_exc() + + ''' + creates a temporary directory. + @param xmsf + @return the url of the new directory. + @throws Exception + ''' + + def createTempDir(self, xmsf): + tempPath = FileAccess.getOfficePath2(xmsf, "Temp", "", "") + s = self.fileAccess.createNewDir(tempPath, "wwiz") + self.fileAccess.createNewDir(s, "images") + return s diff --git a/wizards/com/sun/star/wizards/web/WWD_Events.py b/wizards/com/sun/star/wizards/web/WWD_Events.py new file mode 100644 index 000000000000..e15d98a4eeaa --- /dev/null +++ b/wizards/com/sun/star/wizards/web/WWD_Events.py @@ -0,0 +1,937 @@ +import traceback +from common.Desktop import Desktop +from WWD_Startup import * +from BackgroundsDialog import BackgroundsDialog +from IconsDialog import IconsDialog + +''' +This class implements the ui-events of the +web wizard. +it is therfore sorted to steps. +not much application-logic here - just plain +methods which react to events. +The only exception are the finish methods with the save +session methods. +''' + +class WWD_Events(WWD_Startup): + + iconsDialog = None + bgDialog = None + + ''' + He - my constructor ! + I add a window listener, which, when + the window closes, deltes the temp directory. + ''' + + def __init__(self, xmsf): + super(WWD_Events, self).__init__(xmsf) + self.chkFTP.addKeyListener(None) + self.chkLocalDir.addKeyListener(None) + self.chkZip.addKeyListener(None) + self.currentSession = "" + self.exitOnCreate = True + self.time = 0 + self.count = 0 + + @classmethod + def main(self, args): + ConnectStr = \ + "uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext" + try: + xmsf = Desktop.connect(ConnectStr) + ww = WWD_Events(xmsf) + ww.show() + ww.cleanup() + except Exception: + traceback.print_exc() + + def leaveStep(self, nOldStep, nNewStep): + pass + + def enterStep(self, old, newStep): + if old == 1: + sessionToLoad = "" + s = Helper.getUnoPropertyValue(lstLoadWWD_Startup.settings.Model, "SelectedItems") + if s.length == 0 or s[0] == 0: + sessionToLoad = "" + else: + sessionToLoad = \ + WWD_Startup.settings.cp_SavedSessions.getElementAt(s[0]).cp_Name + + if not sessionToLoad.equals(self.currentSession): + loadSession(sessionToLoad) + + ''' + ************** + STEP 1 + ************** + ''' + + ''' + Called from the Uno event dispatcher when the + user selects a saved session. + ''' + def sessionSelected(self): + s = Helper.getUnoPropertyValue(getModel(lstLoadSettings), "SelectedItems") + setEnabled(btnDelSession, s.length > 0 and s[0] > 0) + + ''' + Ha ! the session should be loaded :-) + ''' + + def loadSession(self, sessionToLoad): + try: + sd = self.getStatusDialog() + #task = Task("LoadDocs", "", 10) + sd.execute(this, task, resources.resLoadingSession) + #task.start() + self.setSelectedDoc(WWD_Events.EMPTY_SHORT_ARRAY) + Helper.setUnoPropertyValue( + lstDocuments.Model, "SelectedItems", WWD_Events.EMPTY_SHORT_ARRAY) + Helper.setUnoPropertyValue( + lstDocuments.Model, "StringItemList", WWD_Events.EMPTY_STRING_ARRAY) + if not sessionToLoad: + view = Configuration.getConfigurationRoot( + xMSF, CONFIG_PATH + "/DefaultSession", False) + else: + view = Configuration.getConfigurationRoot( + xMSF, CONFIG_PATH + "/SavedSessions", False) + view = Configuration.getNode(sessionToLoad, view) + + session = CGSession() + session.root = settings + session.readConfiguration(view, CONFIG_READ_PARAM) + #task.setMax(session.cp_Content.cp_Documents.getSize() * 5 + 7) + #task.advance(True) + if sessionToLoad == "": + setSaveSessionName(session) + + mount(session, task, False, sd.self.xUnoDialog) + checkSteps() + self.currentSession = sessionToLoad + '''while task.getStatus() <= task.getMax(): + task.advance(False) + task.removeTaskListener(sd)''' + except Exception, ex: + unexpectedError(ex) + + try: + refreshStylePreview() + updateIconsetText() + except Exception, e: + # TODO Auto-generated catch block + e.printStackTrace() + + ''' + hmm. the user clicked the delete button. + ''' + + def delSession(self): + selected = Helper.getUnoPropertyValue( + lstLoadWWD_Startup.settings.Model, "SelectedItems") + if selected.length == 0: + return + + if selected[0] == 0: + return + + confirm = AbstractErrorHandler.showMessage( + self.xMSF, self.xUnoDialog.Peer, resources.resDelSessionConfirm, + ErrorHandler.ERROR_QUESTION_NO) + if confirm: + try: + name = WWD_Startup.settings.cp_SavedSessions.getKey(selected[0]) + # first delete the session from the registry/configuration. + Configuration.removeNode( + self.xMSF, CONFIG_PATH + "/SavedSessions", name) + # then delete WWD_Startup.settings.cp_SavedSessions + WWD_Startup.settings.cp_SavedSessions.remove(selected[0]) + WWD_Startup.settings.savedSessions.remove(selected[0] - 1) + nextSelected = [0] + # We try to select the same item index again, if possible + if WWD_Startup.settings.cp_SavedSessions.getSize() > selected[0]: + nextSelected[0] = selected[0] + else: + # this will always be available because + # the user can not remove item 0. + nextSelected[0] = (short)(selected[0] - 1) + # if the <none> session will + # be selected, disable the remove button... + if nextSelected[0] == 0: + Helper.setUnoPropertyValue( + btnDelSession.Model, + PropertyNames.PROPERTY_ENABLED, False) + # select... + + Helper.setUnoPropertyValue( + lstLoadWWD_Startup.settings.Model, "SelectedItems", nextSelected) + + except Exception, ex: + ex.printStackTrace() + unexpectedError(ex) + + ''' + ************** + STEP 2 + ************** + ''' + + ''' + when the user clicks another document + in the listbox, this method is called, + and couses the display in + the textboxes title,description, author and export format + to change + ''' + + def setSelectedDoc(self, s): + oldDoc = self.getDoc([WWD_Startup.selectedDoc]) + doc = self.getDoc(s) + if doc is None: + self.fillExportList([]) + #I try to avoid refreshing the export list if + #the same type of document is chosen. + elif oldDoc is None or oldDoc.appType != doc.appType: + self.fillExportList(WWD_Startup.settings.getExporters(doc.appType)) + + WWD_Startup.selectedDoc = s + self.mountList(doc, self.docAware) + self.disableDocUpDown() + + ''' + The user clicks the "Add" button. + This will open a "FileOpen" dialog, + and, if the user chooses more than one file, + will open a status dialog, when validating each document. + ''' + + def addDocument(self): + try: + files = self.getDocAddDialog().callOpenDialog( + True, WWD_Startup.settings.cp_DefaultSession.cp_InDirectory) + if files is None: + return + + task = None #Task("", "", len(files) * 5) + ''' + If more than a certain number + of documents have been added, + open the status dialog. + ''' + if (len(files) > MIN_ADD_FILES_FOR_DIALOG): + sd = self.getStatusDialog() + sd.setLabel(resources.resValidatingDocuments) + sd.execute(this, task, resources.prodName) + oLoadDocs = self.LoadDocs(self.xMSF, self.xUnoDialog, files, self) + oLoadDocs.loadDocuments() + #task.removeTaskListener(sd) + else: + ''' + When adding a single document, do not use a + status dialog... + ''' + oLoadDocs = self.LoadDocs(self.xMSF, self.xUnoDialog, files, self) + oLoadDocs.loadDocuments() + except Exception: + traceback.print_exc() + + ''' + The user clicked delete. + ''' + + def removeDocument(self): + if WWD_Startup.selectedDoc.length == 0: + return + + WWD_Startup.settings.cp_DefaultSession.cp_Content.cp_Documents.remove( + WWD_Startup.selectedDoc[0]) + # update the selected document + while WWD_Startup.selectedDoc[0] >= getDocsCount(): + WWD_Startup.selectedDoc[0] -= 1 + # if there are no documents... + if WWD_Startup.selectedDoc[0] == -1: + WWD_Startup.selectedDoc = WWD_Events.EMPTY_SHORT_ARRAY + # update the list to show the right selection. + + docListDA.updateUI() + # disables all the next steps, if the list of docuemnts + # is empty. + checkSteps() + + ''' + doc up. + ''' + + def docUp(self): + doc = WWD_Startup.settings.cp_DefaultSession.cp_Content.cp_Documents.getElementAt( + WWD_Startup.selectedDoc[0]) + WWD_Startup.settings.cp_DefaultSession.cp_Content.cp_Documents.remove( + WWD_Startup.selectedDoc[0]) + WWD_Startup.settings.cp_DefaultSession.cp_Content.cp_Documents.add( + WWD_Startup.selectedDoc[0] - 1, doc) + docListDA.updateUI() + self.disableDocUpDown() + + ''' + doc down + ''' + + def docDown(self): + doc = WWD_Startup.settings.cp_DefaultSession.cp_Content.cp_Documents.getElementAt( + WWD_Startup.selectedDoc[0]) + WWD_Startup.settings.cp_DefaultSession.cp_Content.cp_Documents.remove( + WWD_Startup.selectedDoc[0]) + WWD_Startup.settings.cp_DefaultSession.cp_Content.cp_Documents.add( + (WWD_Startup.selectedDoc[0] + 1), doc) + docListDA.updateUI() + self.disableDocUpDown() + + ''' + ************** + STEP 5 + ************** + ''' + + ''' + the user clicked the "backgrounds" button + ''' + + def chooseBackground(self): + try: + self.setEnabled(self.btnBackgrounds, False) + if WWD_Events.bgDialog is None: + WWD_Events.bgDialog = BackgroundsDialog( + self.xMSF, WWD_Startup.settings.cp_BackgroundImages, + self.resources) + WWD_Events.bgDialog.createWindowPeer(self.xUnoDialog.Peer) + + WWD_Events.bgDialog.setSelected( + WWD_Startup.settings.cp_DefaultSession.cp_Design.cp_BackgroundImage) + i = WWD_Events.bgDialog.executeDialogFromParent(self) + if i == 1: + #ok + setBackground(WWD_Events.bgDialog.getSelected()) + except Exception: + traceback.print_exc() + finally: + self.setEnabled(btnBackgrounds, True) + + ''' + invoked when the BackgorundsDialog is "OKed". + ''' + + def setBackground(self, background): + if background == None: + background = "" + + WWD_Startup.settings.cp_DefaultSession.cp_Design.cp_BackgroundImage \ + = background + refreshStylePreview() + + ''' + is called when the user clicks "Icon sets" button. + ''' + + def chooseIconset(self): + try: + self.setEnabled(self.btnIconSets, False) + if WWD_Events.iconsDialog is None: + WWD_Events.iconsDialog = IconsDialog( + self.xMSF, WWD_Startup.settings.cp_IconSets, + self.resources) + WWD_Events.iconsDialog.createWindowPeer(self.xUnoDialog.Peer) + + WWD_Events.iconsDialog.setIconset( + WWD_Startup.settings.cp_DefaultSession.cp_Design.cp_IconSet) + i = WWD_Events.iconsDialog.executeDialogFromParent(self) + if i == 1: + #ok + self.setIconset(WWD_Events.iconsDialog.getIconset()) + except Exception: + traceback.print_exc() + finally: + self.setEnabled(btnIconSets, True) + + ''' + invoked when the Iconsets Dialog is OKed. + ''' + + def setIconset(self, icon): + WWD_Startup.settings.cp_DefaultSession.cp_Design.cp_IconSet = icon + updateIconsetText() + + ''' + ************** + STEP 7 + ************** + ''' + + ''' + sets the publishing url of either a local/zip or ftp publisher. + updates the ui.... + ''' + def setPublishUrl(self, publisher, url, number): + if url == None: + return None + + p = getPublisher(publisher) + p.cp_URL = url + p.cp_Publish = True + updatePublishUI(number) + p.overwriteApproved = True + return p + + ''' + updates the ui of a certain publisher + (the text box url) + @param number + ''' + + def updatePublishUI(self, number): + (pubAware.get(number)).updateUI() + (pubAware.get(number + 1)).updateUI() + checkPublish() + + ''' + The user clicks the local "..." button. + ''' + + def setPublishLocalDir(self): + dir = showFolderDialog( + "Local destination directory", "", + WWD_Startup.settings.cp_DefaultSession.cp_OutDirectory) + #if ok was pressed... + setPublishUrl(LOCAL_PUBLISHER, dir, 0) + + ''' + The user clicks the "Configure" FTP button. + ''' + + def setFTPPublish(self): + if showFTPDialog(getPublisher(FTP_PUBLISHER)): + getPublisher + (FTP_PUBLISHER).cp_Publish = True + updatePublishUI(2) + + ''' + show the ftp dialog + @param pub + @return true if OK was pressed, otherwise false. + ''' + + def showFTPDialog(self, pub): + try: + return getFTPDialog(pub).execute(this) == 1 + except Exception, ex: + ex.printStackTrace() + return False + + ''' + the user clicks the zip "..." button. + Choose a zip file... + ''' + + def setZipFilename(self): + sd = getZipDialog() + zipFile = sd.callStoreDialog( + WWD_Startup.settings.cp_DefaultSession.cp_OutDirectory, + resources.resDefaultArchiveFilename) + setPublishUrl(ZIP_PUBLISHER, zipFile, 4) + getPublisher + (ZIP_PUBLISHER).overwriteApproved = True + + ''' + the user clicks the "Preview" button. + ''' + + def documentPreview(self): + try: + if self.docPreview == None: + self.docPreview = TOCPreview( + self.xMSF, settings, resources, + stylePreview.tempDir, myFrame) + + self.docPreview.refresh(settings) + except Exception, ex: + unexpectedError(ex) + + ''' + ************** + FINISH + ************** + ''' + + ''' + This method checks if the given target's path, + added the pathExtension argument, exists, + and asks the user what to do about it. + If the user says its all fine, then the target will + be replaced. + @return true if "create" should continue. false if "create" should abort. + ''' + def publishTargetApproved(self): + result = True + # 1. check local publish target + p = getPublisher(LOCAL_PUBLISHER) + # should publish ? + if (p.cp_Publish): + path = getFileAccess().getPath(p.url, None) + # target exists? + if getFileAccess().exists(p.url, False): + #if its a directory + if getFileAccess().isDirectory(p.url): + #check if its empty + files = getFileAccess().listFiles(p.url, True) + if files.length > 0: + ''' + it is not empty :-( + it either a local publisher or an ftp + (zip uses no directories as target...) + ''' + message = resources.resLocalTragetNotEmpty.replace( + "%FILENAME", path) + result = AbstractErrorHandler.showMessage( + self.xMSF, self.xUnoDialog.Peer, message, + ErrorHandler.MESSAGE_WARNING, + ErrorHandler.BUTTONS_YES_NO, ErrorHandler.DEF_NO, + ErrorHandler.RESULT_YES) + if not result: + return result + + else: + #not a directory, but still exists + message = resources.resLocalTargetExistsAsfile.replace( + "%FILENAME", path) + AbstractErrorHandler.showMessage( + self.xMSF, self.xUnoDialog.Peer, message, + ErrorHandler.ERROR_PROCESS_FATAL) + return False + + # try to write to the path... + else: + # the local target directory does not exist. + message = resources.resLocalTargetCreate.replace( + "%FILENAME", path) + try: + result = AbstractErrorHandler.showMessage( + self.xMSF, self.xUnoDialog.Peer, message, + ErrorHandler.ERROR_QUESTION_YES) + except Exception, ex: + ex.printStackTrace() + + if not result: + return result + # try to create the directory... + + try: + getFileAccess().fileAccess.createFolder(p.cp_URL) + except Exception, ex: + message = resources.resLocalTargetCouldNotCreate.replace( + "%FILENAME", path) + AbstractErrorHandler.showMessage( + self.xMSF, self.xUnoDialog.Peer, message, + ErrorHandler.ERROR_PROCESS_FATAL) + return False + + p = getPublisher(ZIP_PUBLISHER) + if p.cp_Publish: + path = getFileAccess().getPath(p.cp_URL, None) + # target exists? + if getFileAccess().exists(p.cp_URL, False): + #if its a directory + if getFileAccess().isDirectory(p.cp_URL): + message = resources.resZipTargetIsDir.replace( + "%FILENAME", path) + AbstractErrorHandler.showMessage( + self.xMSF, self.xUnoDialog.Peer, message, + ErrorHandler.ERROR_PROCESS_FATAL) + return False + else: + #not a directory, but still exists ( a file...) + if not p.overwriteApproved: + message = resources.resZipTargetExists.replace( + "%FILENAME", path) + result = AbstractErrorHandler.showMessage( + self.xMSF, self.xUnoDialog.Peer, message, + ErrorHandler.ERROR_QUESTION_YES) + if not result: + return False + # 3. check FTP + + p = getPublisher(FTP_PUBLISHER) + # should publish ? + if p.cp_Publish: + path = getFileAccess().getPath(p.cp_URL, None) + # target exists? + if getFileAccess().exists(p.url, False): + #if its a directory + if getFileAccess().isDirectory(p.url): + #check if its empty + files = getFileAccess().listFiles(p.url, True) + if files.length > 0: + ''' + it is not empty :-( + it either a local publisher or an ftp + (zip uses no directories as target...) + ''' + message = resources.resFTPTargetNotEmpty.replace( + "%FILENAME", path) + result = AbstractErrorHandler.showMessage( + self.xMSF, self.xUnoDialog.Peer, message, + ErrorHandler.ERROR_QUESTION_CANCEL) + if not result: + return result + + else: + #not a directory, but still exists (as a file) + message = resources.resFTPTargetExistsAsfile.replace( + "%FILENAME", path) + AbstractErrorHandler.showMessage( + self.xMSF, self.xUnoDialog.Peer, message, + ErrorHandler.ERROR_PROCESS_FATAL) + return False + + # try to write to the path... + else: + # the ftp target directory does not exist. + message = resources.resFTPTargetCreate.replace( + "%FILENAME", path) + result = AbstractErrorHandler.showMessage( + self.xMSF, self.xUnoDialog.Peer, message, + ErrorHandler.ERROR_QUESTION_YES) + if not result: + return result + # try to create the directory... + + try: + getFileAccess().fileAccess.createFolder(p.url) + except Exception, ex: + message = resources.resFTPTargetCouldNotCreate.replace( + "%FILENAME", path) + AbstractErrorHandler.showMessage( + self.xMSF, self.xUnoDialog.Peer, message, + ErrorHandler.ERROR_PROCESS_FATAL) + return False + + return True + + ''' + return false if "create" should be aborted. true if everything is fine. + ''' + + def saveSession(self): + try: + node = None + name = getSessionSaveName() + #set documents index field. + docs = WWD_Startup.settings.cp_DefaultSession.cp_Content.cp_Documents + i = 0 + while i < docs.getSize(): + (docs.getElementAt(i)).cp_Index = i + i += 1 + conf = Configuration.getConfigurationRoot( + self.xMSF, CONFIG_PATH + "/SavedSessions", True) + # first I check if a session with the given name exists + try: + node = Configuration.getNode(name, conf) + if node != None: + if not AbstractErrorHandler.showMessage( + self.xMSF, self.xUnoDialog.Peer, + resources.resSessionExists.replace("${NAME}", name), + ErrorHandler.ERROR_NORMAL_IGNORE): + return False + #remove the old session + + Configuration.removeNode(conf, name) + except NoSuchElementException, nsex: + traceb + + WWD_Startup.settings.cp_DefaultSession.cp_Index = 0; + node = Configuration.addConfigNode(conf, name) + WWD_Startup.settings.cp_DefaultSession.cp_Name = name; + WWD_Startup.settings.cp_DefaultSession.writeConfiguration( + node, CONFIG_READ_PARAM) + WWD_Startup.settings.cp_SavedSessions.reindexSet(conf, name, "Index") + Configuration.commit(conf) + # now I reload the sessions to actualize the list/combo + # boxes load/save sessions. + WWD_Startup.settings.cp_SavedSessions.clear() + confView = Configuration.getConfigurationRoot( + self.xMSF, CONFIG_PATH + "/SavedSessions", False) + WWD_Startup.settings.cp_SavedSessions.readConfiguration( + confView, CONFIG_READ_PARAM) + WWD_Startup.settings.cp_LastSavedSession = name; + self.currentSession = name + # now save the name of the last saved session... + WWD_Startup.settings.cp_LastSavedSession = name; + # TODO add the <none> session... + prepareSessionLists() + ListModelBinder.fillList( + lstLoadSettings, WWD_Startup.settings.cp_SavedSessions.items(), None) + ListModelBinder.fillComboBox( + cbSaveSettings, WWD_Startup.settings.savedSessions.items(), None) + selectSession() + self.currentSession = WWD_Startup.settings.cp_LastSavedSession + return True + except Exception, ex: + ex.printStackTrace() + return False + + def targetStringFor(self, publisher): + p = getPublisher(publisher) + if p.cp_Publish: + return "\n" + getFileAccess().getPath(p.cp_URL, None) + else: + return "" + + ''' + this method will be called when the Status Dialog + is hidden. + It checks if the "Process" was successfull, and if so, + it closes the wizard dialog. + ''' + + def finishWizardFinished(self): + if self.process.getResult(): + targets = targetStringFor(LOCAL_PUBLISHER) + \ + targetStringFor(ZIP_PUBLISHER) + \ + targetStringFor(FTP_PUBLISHER) + message = resources.resFinishedSuccess.replace( + "%FILENAME", targets) + AbstractErrorHandler.showMessage( + self.xMSF, self.xUnoDialog.Peer, message, ErrorHandler.ERROR_MESSAGE) + if self.exitOnCreate: + self.xDialog.endExecute() + + else: + AbstractErrorHandler.showMessage( + self.xMSF, self.xUnoDialog.Peer, resources.resFinishedNoSuccess, + ErrorHandler.ERROR_WARNING) + + def cancel(self): + xDialog.endExecute() + + ''' + the user clicks the finish/create button. + ''' + + def finishWizard(self): + finishWizard(True) + return True + + ''' + finish the wizard + @param exitOnCreate_ should the wizard close after + a successfull create. + Default is true, + I have a hidden feature which enables false here + ''' + + def finishWizard(self, exitOnCreate_): + self.exitOnCreate = exitOnCreate_ + ''' + First I check if ftp password was set, if not - the ftp dialog pops up + This may happen when a session is loaded, since the + session saves the ftp url and username, but not the password. + ''' + p = getPublisher(FTP_PUBLISHER) + # if ftp is checked, and no proxies are set, and password is empty... + if p.cp_Publish and not proxies and p.password == None or \ + p.password == "": + if showFTPDialog(p): + updatePublishUI(2) + #now continue... + finishWizard2() + + else: + finishWizard2() + + ''' + this method is only called + if ftp-password was eather set, or + the user entered one in the FTP Dialog which + popped up when clicking "Create". + ''' + + def finishWizard2(self): + p = getPublisher(LOCAL_PUBLISHER) + p.url = p.cp_URL + ''' + zip publisher is using another url form... + ''' + p = getPublisher(ZIP_PUBLISHER) + #replace the '%' with '%25' + url1 = JavaTools.replaceSubString(p.cp_URL, "%25", "%") + #replace all '/' with '%2F' + url1 = JavaTools.replaceSubString(url1, "%2F", "/") + p.url = "vnd.sun.star.zip:#" + url1 + "/"; + ''' + and now ftp... + ''' + p = getPublisher(FTP_PUBLISHER) + p.url = FTPDialog.getFullURL(p); + ''' first we check the publishing targets. If they exist we warn and + ask what to do. a False here means the user said "cancel" + (or rather:clicked) + ''' + if not publishTargetApproved(): + return + ''' + In order to save the session correctly, + I return the value of the ftp publisher cp_Publish + property to its original value... + ''' + + p.cp_Publish = __ftp; + #if the "save settings" checkbox is on... + + if isSaveSession(): + # if canceled by user + if not saveSession(): + return + + else: + WWD_Startup.settings.cp_LastSavedSession = "" + + try: + conf = Configuration.getConfigurationRoot(xMSF, CONFIG_PATH, True) + Configuration.set( + WWD_Startup.settings.cp_LastSavedSession, "LastSavedSession", conf) + Configuration.commit(conf) + except Exception, ex: + ex.printStackTrace() + + ''' + again, if proxies are on, I disable ftp before the creation process + starts. + ''' + if proxies: + p.cp_Publish = False + ''' + There is currently a bug, which crashes office when + writing folders to an existing zip file, after deleting + its content, so I "manually" delete it here... + ''' + + p = getPublisher(ZIP_PUBLISHER) + if getFileAccess().exists(p.cp_URL, False): + getFileAccess().delete(p.cp_URL) + + try: + eh = ProcessErrorHandler(xMSF, self.xUnoDialog.Peer, resources) + self.process = Process(settings, xMSF, eh) + pd = getStatusDialog() + pd.setRenderer(ProcessStatusRenderer (resources)) + pd.execute(self, self.process.myTask, resources.prodName) + #process, + self.process.runProcess() + finishWizardFinished() + self.process.myTask.removeTaskListener(pd) + except Exception, ex: + ex.printStackTrace() + + ''' + is called on the WindowHidden event, + deletes the temporary directory. + ''' + + def cleanup(self): + try: + self.dpStylePreview.dispose() + self.stylePreview.cleanup() + + if WWD_Events.bgDialog is not None: + WWD_Events.bgDialog.xComponent.dispose() + + if WWD_Events.iconsDialog is not None: + WWD_Events.iconsDialog.xComponent.dispose() + + if ftpDialog is not None: + ftpDialog.xComponent.dispose() + + xComponent.dispose() + + if ProcessStatusRenderer is not None: + ProcessStatusRenderer.close(False) + + except Exception, ex: + traceback.print_exc() + + class LoadDocs(object): + + def __init__(self,xmsf, xC_, files_, parent_): + self.xMSF = xmsf + self.xC = xC_ + self.files = files_ + self.parent = parent_ + + def loadDocuments(self): + if len(WWD_Startup.selectedDoc) > 0: + offset = WWD_Startup.selectedDoc[0] + 1 + else: + offset = WWD_General.getDocsCount() + + ''' + if the user chose one file, the list starts at 0, + if he chose more than one, the first entry is a directory name, + all the others are filenames. + ''' + if len(self.files) > 1: + start = 1 + else: + start = 0 + + #Number of documents failed to validate. + failed = 0 + + # store the directory + if start == 1: + WWD_General.settings.cp_DefaultSession.cp_InDirectory = files[0] + else: + WWD_General.settings.cp_DefaultSession.cp_InDirectory = \ + FileAccess.getParentDir(self.files[0]) + + ''' + Here i go through each file, and validate it. + If its ok, I add it to the ListModel/ConfigSet + ''' + + for i in xrange(start, len(self.files)): + doc = CGDocument() + + if start == 0: + doc.cp_URL = self.files[i] + else: + doc.cp_URL = FileAccess.connectURLs(files[0], files[i]) + + ''' + so - i check each document and if it is ok I add it. + The failed variable is used only to calculate the place to add - + Error reporting to the user is (or should (-: ) + done in the checkDocument(...) method + ''' + if WWD_Startup.checkDocument(self.xMSF, doc, None, self.xC): + WWD_General.settings.cp_DefaultSession.cp_Content.cp_Documents.add( + offset + i - failed - start, doc) + else: + failed += 1 + + # if any documents where added, + # set the first one to be the current-selected document. + if len(self.files) > start + failed: + self.parent.setSelectedDoc([offset]) + + # update the ui... + self.parent.docListDA.updateUI(); + # this enables/disables the next steps. + # when no documents in the list, all next steps are disabled + self.parent.checkSteps() + ''' + a small insurance that the status dialog will + really close... + ''' + + #while (self.task.getStatus() < self.task.getMax()): + # self.task.advance(false) diff --git a/wizards/com/sun/star/wizards/web/WWD_General.py b/wizards/com/sun/star/wizards/web/WWD_General.py new file mode 100644 index 000000000000..6fbb0dcd8c1e --- /dev/null +++ b/wizards/com/sun/star/wizards/web/WWD_General.py @@ -0,0 +1,258 @@ +from WebWizardDialog import * +from common.SystemDialog import SystemDialog +from ui.event.ListModelBinder import ListModelBinder + +''' +@author rpiterman +This class implements general methods, used by different sub-classes +(either WWD_Sturtup, or WWD_Events) or both. +''' + +class WWD_General(WebWizardDialog): + + settings = None + + def __init__(self, xmsf): + super(WWD_General, self).__init__(xmsf) + self.xStringSubstitution = SystemDialog.createStringSubstitution(xmsf) + + def getStatusDialog(self): + statusDialog = StatusDialog( + self.xMSF, StatusDialog.STANDARD_WIDTH, + self.resources.resLoadingSession, False, + [self.resources.prodName, "", "", "", "", ""], + HelpIds.getHelpIdString(HID0_STATUS_DIALOG)) + try: + statusDialog.createWindowPeer(xControl.Peer) + except Exception: + traceback.print_exc() + + return statusDialog + + ''' + File Dialog methods + ''' + + def getDocAddDialog(self): + self.docAddDialog = SystemDialog.createOpenDialog(self.xMSF) + for i in xrange(WWD_General.settings.cp_Filters.getSize()): + f = WWD_General.settings.cp_Filters.getElementAt(i) + if f is not None: + self.docAddDialog.addFilter( + f.cp_Name.replace("%PRODNAME", self.resources.prodName), + f.cp_Filter, i == 0) + return self.docAddDialog + + def getZipDialog(self): + if self.zipDialog is None: + self.zipDialog = SystemDialog.createStoreDialog(xMSF) + self.zipDialog.addFilter(self.resources.resZipFiles, "*.zip", True) + + return self.zipDialog + + def getFTPDialog(self, pub): + if self.ftpDialog is None: + try: + self.ftpDialog = FTPDialog.FTPDialog_unknown(xMSF, pub) + self.ftpDialog.createWindowPeer(xControl.getPeer()) + except Exception: + traceback.print_exc() + + return self.ftpDialog + + def showFolderDialog(self, title, description, dir): + if self.folderDialog is None: + self.folderDialog = SystemDialog.createFolderDialog(xMSF) + + return self.folderDialog.callFolderDialog(title, description, dir) + + ''' + returns the document specified + by the given short array. + @param s + @return + ''' + + @classmethod + def getDoc(self, s): + if len(s) == 0: + return None + elif WWD_General.settings.cp_DefaultSession.cp_Content.cp_Documents.getSize() <= s[0]: + return None + else: + return \ + WWD_General.settings.cp_DefaultSession.cp_Content.cp_Documents.childrenList[s[0]] + + ''' + how many documents are in the list? + @return the number of documents in the docs list. + ''' + + @classmethod + def getDocsCount(self): + return WWD_General.settings.cp_DefaultSession.cp_Content.cp_Documents.getSize() + + ''' + fills the export listbox. + @param listContent + ''' + + def fillExportList(self, listContent): + ListModelBinder.fillList(self.lstDocTargetType, listContent, None) + + ''' + returns a publisher object for the given name + @param name one of the WebWizardConst constants : FTP + @return + ''' + + def getPublisher(self, name): + return WWD_General.settings.cp_DefaultSession.cp_Publishing.getElement(name) + + ''' + @return true if the checkbox "save session" is checked. + ''' + + def isSaveSession(self): + return int(Helper.getUnoPropertyValue( + chkSaveSettings.Model, PropertyNames.PROPERTY_STATE) == 1) + + ''' + @return the name to save the session (step 7) + ''' + + def getSessionSaveName(self): + return Helper.getUnoPropertyValue(getModel(cbSaveSettings), "Text") + + ''' + This method checks the status of the wizards and + enables or disables the 'next' and the 'create' button. + ''' + + def checkSteps(self): + ''' + first I check the document list. + If it is empty, then step3 and on are disabled. + ''' + if self.checkDocList(): + self.checkPublish() + + ''' + enables/disables the steps 3 to 7) + @param enabled true = enabled, false = disabled. + ''' + + def enableSteps(self, enabled): + if not enabled and not self.isStepEnabled(3): + #disbale steps 3-7 + return + + for i in xrange(3,8): + self.setStepEnabled(i, enabled, True) + ''' + in this place i just disable the finish button. + later, in the checkPublish, which is only performed if + this one is true, it will be enabled (if the check + is positive) + ''' + + if not enabled: + self.enableFinishButton(False) + + ''' + Checks if the documents list is + empty. If it is, disables the steps 3-7, and the + create button. + @return + ''' + + def checkDocList(self): + if WWD_General.settings.cp_DefaultSession.cp_Content.cp_Documents.getSize() \ + == 0: + self.enableSteps(False) + return False + else: + self.enableSteps(True) + return True + + ''' + check if the save-settings input is ok. + (eather the checkbox is unmarked, or, + if it is marked, a session name exists. + ''' + + def checkSaveSession(self): + return (not isSaveSession() or not getSessionSaveName() == "") + + ''' + @return false if this publisher is not active, or, if it + active, returns true if the url is not empty... + if the url is empty, throws an exception + ''' + + def checkPublish2(self, s, text, _property): + p = self.getPublisher(s) + if p.cp_Publish: + url = Helper.getUnoPropertyValue(text.Model, _property) + if url is None or url == "": + raise IllegalArgumentException () + else: + return True + + else: + return False + + ''' + + @return false either if publishing input is wrong or there + are no publishing targets chosen. returns true when at least + one target is chosen, *and* all + which are chosen are legal. + If proxies are on, ftp publisher is ignored. + ''' + + def checkPublish_(self): + try: + return \ + self.checkPublish2(LOCAL_PUBLISHER, self.txtLocalDir, "Text") \ + or (not self.proxies and self.checkPublish( + FTP_PUBLISHER, lblFTP, PropertyNames.PROPERTY_LABEL) \ + or self.checkPublish2(ZIP_PUBLISHER, self.txtZip, "Text")) \ + and self.checkSaveSession() + except IllegalArgumentException, ex: + return False + + ''' + This method checks if the publishing + input is ok, and enables and disables + the 'create' button. + public because it is called from + an event listener object. + ''' + + def checkPublish(self): + self.enableFinishButton(self.checkPublish_()) + + ''' + shows a message box "Unexpected Error... " :-) + @param ex + ''' + + def unexpectedError(self, ex): + ex.printStackTrace() + peer = xControl.getPeer() + AbstractErrorHandler.showMessage( + self.xMSF, peer, self.resources.resErrUnexpected, + ErrorHandler.ERROR_PROCESS_FATAL) + + ''' + substitutes path variables with the corresponding values. + @param path a path, which might contain OOo path variables. + @return the path, after substituing path variables. + ''' + + def substitute(self, path): + try: + return self.xStringSubstitution.substituteVariables(path, False) + except Exception, ex: + return path diff --git a/wizards/com/sun/star/wizards/web/WWD_Startup.py b/wizards/com/sun/star/wizards/web/WWD_Startup.py new file mode 100644 index 000000000000..86d0091fc752 --- /dev/null +++ b/wizards/com/sun/star/wizards/web/WWD_Startup.py @@ -0,0 +1,661 @@ +from WWD_General import * +from common.Configuration import Configuration +from common.FileAccess import FileAccess +from data.CGSettings import CGSettings +from data.CGSessionName import CGSessionName +from ui.event.ListModelBinder import ListModelBinder +from ui.event.UnoDataAware import UnoDataAware +from ui.event.RadioDataAware import RadioDataAware +from data.CGDocument import CGDocument +from ui.DocumentPreview import DocumentPreview +from StylePreview import StylePreview +from ui.event.DataAware import DataAware + +from com.sun.star.lang import IllegalArgumentException + +''' +Web Wizard Dialog implementation : Startup. +This class contains the startup implementation and session mounting methods. +<h2> Data Aware Concept </h2> +<p> I use DataAware objects, which synchronize +UI and Data. A DataAware object a kind of interface +between a Value and a UI element. +</P> +<p> +A Value is either a JavaBean property with +a Getter and a Setter or a public class Memeber. +</P> +When the UI Control changes, the Value changes correspondingly. +This depends on WWD_General.settings a Listener which calls the updateData() +method od the DataAware object. +When the Value changes, the UI Control changes respopndingly. +This also depends on WWD_General.settings a Listener which calls the updateUI +method of the DataAware object. +</P> +<P> +here I use only UI Listeners, and keep calling +the updateUI() method whenever I change the Value. +</P> +To contain the Data, I use the Configuration Data Objects +which read themselfs out of the Configuration. they are all located under +the data package. +<p/> +Different groups of DataAware objects are grouped into vectors. +Each group (all elements of a vector) uses the same DataObject, +so when I change the underlying dataObject, I change the whole vector's +DataObject, thus actualizing UI.<br/> +This is what happends when a session loads: I Load the session into +a tree of DataObjects, and change the DataAware's DataObject. <br/> +One could also look at this as a kind of "View-Model" relationship. +The controls are the View, The DataObjects are the Model, containing the +Data rad directly from the configuration, and the DataAware objects +are the controller inbetween. + +@author rpiterman +''' + +class WWD_Startup(WWD_General): + + selectedDoc = () + + ''' + He - my constructor ! + I call/do here in this order: <br/> + Check if ftp http proxy is set, and warn user he can not use + ftp if it is.<br/> + draw NaviBar and steps 1 to 7, incl. Step X, + which is the Layouts ImageList on step 3.<br/> + load the WWD_General.settings from the configuration. <br/> + set the default save session name to the first + available one (sessionX or something like that). <br/> + set the Layouts ImageList ListModel, and call + its "create()" method. <br/> + check the content (documents) specified in the default session.<br/> + fill the list boxes (saved sessions, styles, combobox save session). <br/> + make data aware. <br/> + updateUI (refreshes the display to crrespond to the data in + the default session.)<br/> + fill the documents listbox. <br/> + if proxies are set, disable the ftp controls in step 7. + ''' + + def __init__(self, xmsf): + super(WWD_Startup, self).__init__(xmsf) + self.sda = None + self.docAware = [] + self.designAware = [] + self.genAware = [] + self.pubAware = [] + self.proxies = self.getOOProxies() + soTemplateDir = FileAccess.getOfficePath2( + xmsf, "Template", "share", "/wizard") + exclamationURL = FileAccess.connectURLs( + soTemplateDir, "../wizard/bitmap/caution_16.png") + self.drawNaviBar() + self.buildStep1() + self.buildStep2() + self.buildStep3() + self.buildStep4() + self.buildStep5() + self.buildStep6() + self.buildStep7(self.proxies, exclamationURL) + self.buildStepX() + self.xMSF = xmsf + xDesktop = Desktop.getDesktop(xmsf) + self.myFrame = OfficeDocument.createNewFrame(xmsf, self) + doc = OfficeDocument.createNewDocument( + self.myFrame, "swriter", False, True) + self.loadSettings(doc) + self.setSaveSessionName(WWD_General.settings.cp_DefaultSession) + self.ilLayouts.listModel = WWD_General.settings.cp_Layouts + self.ilLayouts.create(self) + #COMMENTED + self.checkContent(WWD_General.settings.cp_DefaultSession.cp_Content, None, self.xUnoDialog) + #saved sessions, styles, combobox save session. + # also set the chosen saved session... + self.fillLists() + self.makeDataAware() + + self.updateUI() + + # fill the documents listbox. + self.fillDocumentList(self.settings.cp_DefaultSession.cp_Content) + + if self.proxies: + self.setEnabled(btnFTP, False) + self.setEnabled(chkFTP, False) + + ''' + return true if http proxies or other proxies + which do not enable ftp to function correctly are set. + @return true if (http) proxies are on. + @throws Exception + ''' + + def getOOProxies(self): + node = Configuration.getConfigurationRoot( + self.xMSF, "org.openoffice.Inet/Settings", False) + i = int(node.getByName("ooInetProxyType")) + if i== 0: + #no proxies + return False + elif i == 2: + #http proxies + return True + else: + return True + + ''' + calculates the first available session name, + and sets the current session name to it. + The combobox text in step 7 will be updated + automatically when updateUI() is called. + ''' + + def setSaveSessionName(self, session): + maxValue = 0 + length = self.resources.resSessionName + # traverse between the sessions and find the one that + # has the biggest number. + for i in xrange(WWD_General.settings.cp_SavedSessions.getSize()): + sessionName = \ + WWD_General.settings.cp_SavedSessions.getElementAt(i).cp_Name + if sessionName.startswith(self.resources.resSessionName): + maxValue = max(maxValue, int(sessionName[length:])) + + ''' + fills the road map, and sets the necessary properties, + like MaxStep, Complete, Interactive- + Disables the finbihButton. + ''' + + def addRoadMapItems(self): + self.insertRoadMapItems( + [True, True, False, False, False, False, False], + [self.resources.resStep1, self.resources.resStep2, + self.resources.resStep3, self.resources.resStep4, + self.resources.resStep5, self.resources.resStep6, + self.resources.resStep7]) + self.setRoadmapInteractive(True) + self.setRoadmapComplete(True) + self.setCurrentRoadmapItemID(1) + self.nMaxStep = 7 + self.enableFinishButton(False) + + ''' + This method goes through all + the DataAware vectors and objects and + calls their updateUI() method. + In response, the UI is synchronized to + the state of the corresponding data objects. + ''' + def updateUI(self): + DataAware.updateUIs(self.designAware) + DataAware.updateUIs(self.genAware) + DataAware.updateUIs(self.pubAware) + self.sessionNameDA.updateUI() + self.checkPublish() + + ''' + create the peer, add roadmap, + add roadmap items, add style-preview, + disable the steps 3 to 7 if no documents are + on the list, and... show the dialog! + ''' + + def show(self): + try: + xContainerWindow = self.myFrame.getComponentWindow() + self.createWindowPeer(xContainerWindow) + self.addRoadmap() + self.addRoadMapItems() + self.addStylePreview() + self.checkSteps() + self.executeDialogFromComponent(self.myFrame) + self.removeTerminateListener() + except Exception: + traceback.print_exc() + + ''' + initializes the style preview. + ''' + + def addStylePreview(self): + try: + self.dpStylePreview = DocumentPreview(self.xMSF, self.imgPreview) + self.stylePreview = StylePreview( + self.xMSF, WWD_General.settings.workPath) + self.stylePreview.refresh( + WWD_General.settings.cp_DefaultSession.getStyle(), + WWD_General.settings.cp_DefaultSession.cp_Design.cp_BackgroundImage) + self.dpStylePreview.setDocument( + self.stylePreview.htmlFilename, DocumentPreview.PREVIEW_MODE) + except Exception: + traceback.print_exc() + + ''' + Loads the web wizard WWD_General.settings from the registry. + ''' + + def loadSettings(self, document): + try: + # instanciate + WWD_General.settingsResources = \ + [self.resources.resPages, self.resources.resSlides, + self.resources.resCreatedTemplate, + self.resources.resUpdatedTemplate, + self.resources.resSizeTemplate] + + WWD_General.settings = CGSettings( + self.xMSF, WWD_General.settingsResources, document) + # get configuration view + confRoot = Configuration.getConfigurationRoot( + self.xMSF, CONFIG_PATH, False) + # read + WWD_General.settings.readConfiguration( + confRoot, CONFIG_READ_PARAM) + configSet = WWD_General.settings.cp_DefaultSession.cp_Publishing + # now if path variables are used in publisher pathes, they + # are getting replaced here... + for i in xrange(configSet.getSize()): + p = configSet.getElementAt(i) + p.cp_URL = self.substitute(p.cp_URL) + # initialize the WWD_General.settings. + WWD_General.settings.configure(self.xMSF) + # set resource needed for web page. + # sort the styles alphabetically + #COMMENTED + WWD_General.settings.cp_Styles.sort(None) + self.prepareSessionLists() + if self.proxies: + self.__ftp = self.getPublisher(FTP_PUBLISHER).cp_Publish + self.getPublisher(FTP_PUBLISHER).cp_Publish = False + + except Exception: + traceback.print_exc() + + def prepareSessionLists(self): + # now copy the sessions list... + sessions = WWD_General.settings.cp_SavedSessions.childrenList + + WWD_General.settings.savedSessions.clear() + for index,item in enumerate(sessions): + WWD_General.settings.savedSessions.add(index, item) + # add an empty session to the saved session + # list which apears in step 1 + sn = CGSessionName() + sn.cp_Name = self.resources.resSessionNameNone + WWD_General.settings.cp_SavedSessions.add(0, sn) + + ''' + fills the saved session list, the styles list, + and save session combo box. + Also set the selected "load" session to the last session + which was saved. + ''' + + def fillLists(self): + # fill the saved session list. + + ListModelBinder.fillList(self.lstLoadSettings, + WWD_General.settings.cp_SavedSessions.childrenList, None) + # set the selected session to load. (step 1) + self.selectSession() + # fill the styles list. + ListModelBinder.fillList(self.lstStyles, + WWD_General.settings.cp_Styles.childrenList, None) + # fill the save session combobox (step 7) + ListModelBinder.fillComboBox(self.cbSaveSettings, + WWD_General.settings.savedSessions.childrenList, None) + + def selectSession(self): + selectedSession = 0 + if WWD_General.settings.cp_LastSavedSession is not None \ + and not WWD_General.settings.cp_LastSavedSession == "": + ses = WWD_General.settings.cp_SavedSessions.getElement( + settings.cp_LastSavedSession) + if ses is not None: + selectedSession = \ + WWD_General.settings.cp_SavedSessions.getIndexOf(ses) + + Helper.setUnoPropertyValue( + self.lstLoadSettings.Model, "SelectedItems", (selectedSession,)) + + ''' + attaches to each ui-data-control (like checkbox, groupbox or + textbox, no buttons though), a DataObject's JavaBean Property, + or class member. + ''' + + def makeDataAware(self): + #page 1 + ListModelBinder( + self.lstLoadSettings, WWD_General.settings.cp_SavedSessions) + #page 2 : document properties + self.docListDA = UnoDataAware.attachListBox( + self, "selectedDoc", self.lstDocuments, False) + self.docListDA.disableObjects = \ + [self.lnDocsInfo, self.btnRemoveDoc, self.lblDocTitle, + self.txtDocTitle, self.lblDocInfo, self.txtDocInfo, + self.lblDocAuthor, self.txtDocAuthor, self.lblDocExportFormat, + self.lstDocTargetType] + self.docListDA.updateUI() + doc = CGDocument + #dummy + self.docsBinder = ListModelBinder(self.lstDocuments, + WWD_General.settings.cp_DefaultSession.cp_Content.cp_Documents) + self.docAware.append(UnoDataAware.attachEditControl( + doc, "cp_Title", self.txtDocTitle, True)) + self.docAware.append(UnoDataAware.attachEditControl( + doc, "cp_Description", self.txtDocInfo, True)) + self.docAware.append(UnoDataAware.attachEditControl( + doc, "cp_Author", self.txtDocAuthor, True)) + self.docAware.append(UnoDataAware.attachListBox( + doc, "Exporter", self.lstDocTargetType, False)) + #page 3 : Layout + design = WWD_General.settings.cp_DefaultSession.cp_Design + + #COMMENTED + #self.sda = SimpleDataAware.SimpleDataAware_unknown(design, DataAware.PropertyValue ("Layout", design), ilLayouts, DataAware.PropertyValue ("Selected", ilLayouts)) + + #self.ilLayouts.addItemListener(None) + #page 4 : layout 2 + self.designAware.append(UnoDataAware.attachCheckBox( + design, "cp_DisplayDescription", self.chbDocDesc, True)) + self.designAware.append(UnoDataAware.attachCheckBox( + design, "cp_DisplayAuthor", self.chbDocAuthor, True)) + self.designAware.append(UnoDataAware.attachCheckBox( + design, "cp_DisplayCreateDate", self.chkDocCreated, True)) + self.designAware.append(UnoDataAware.attachCheckBox( + design, "cp_DisplayUpdateDate", self.chkDocChanged, True)) + self.designAware.append(UnoDataAware.attachCheckBox( + design, "cp_DisplayFilename", self.chkDocFilename, True)) + self.designAware.append(UnoDataAware.attachCheckBox( + design, "cp_DisplayFileFormat", self.chkDocFormat, True)) + self.designAware.append(UnoDataAware.attachCheckBox( + design, "cp_DisplayFormatIcon", self.chkDocFormatIcon, True)) + self.designAware.append(UnoDataAware.attachCheckBox( + design, "cp_DisplayPages", self.chkDocPages, True)) + self.designAware.append(UnoDataAware.attachCheckBox( + design, "cp_DisplaySize", self.chkDocSize, True)) + self.designAware.append(RadioDataAware.attachRadioButtons( + WWD_General.settings.cp_DefaultSession.cp_Design, + "cp_OptimizeDisplaySize", + (self.optOptimize640x480, self.optOptimize800x600, + self.optOptimize1024x768), True)) + #page 5 : Style + ''' + note : on style change, i do not call here refresh ,but rather on + a special method which will perform some display, background and Iconsets changes. + ''' + self.designAware.append(UnoDataAware.attachListBox( + WWD_General.settings.cp_DefaultSession.cp_Design, + "cp_Style", self.lstStyles, False)) + #page 6 : site general props + self.genAware.append(UnoDataAware.attachEditControl( + WWD_General.settings.cp_DefaultSession.cp_GeneralInfo, + "cp_Title", self.txtSiteTitle, True)) + self.genAware.append(UnoDataAware.attachEditControl( + WWD_General.settings.cp_DefaultSession.cp_GeneralInfo, + "cp_Description", self.txtSiteDesc, True)) + self.genAware.append(UnoDataAware.attachDateControl( + WWD_General.settings.cp_DefaultSession.cp_GeneralInfo, + "cp_CreationDate", self.dateSiteCreated, False)) + self.genAware.append(UnoDataAware.attachDateControl( + WWD_General.settings.cp_DefaultSession.cp_GeneralInfo, + "cp_UpdateDate", self.dateSiteUpdate, False)) + self.genAware.append(UnoDataAware.attachEditControl( + WWD_General.settings.cp_DefaultSession.cp_GeneralInfo, + "cp_Email", self.txtEmail, True)) + self.genAware.append(UnoDataAware.attachEditControl( + WWD_General.settings.cp_DefaultSession.cp_GeneralInfo, + "cp_Copyright", self.txtCopyright, True)) + #page 7 : publishing + self.pubAware_( + LOCAL_PUBLISHER, self.chkLocalDir, self.txtLocalDir, False) + self.pubAware_( + FTP_PUBLISHER, self.chkFTP, self.lblFTP, True) + self.pubAware_( + ZIP_PUBLISHER, self.chkZip, self.txtZip, False) + self.sessionNameDA = UnoDataAware.attachEditControl( + WWD_General.settings.cp_DefaultSession, "cp_Name", + self.cbSaveSettings, True) + + ''' + A help method to attach a Checkbox and a TextBox to + a CGPublish object properties/class members, + @param publish + @param checkbox + @param textbox + ''' + + def pubAware_(self, publish, checkbox, textbox, isLabel): + p = WWD_General.settings.cp_DefaultSession.cp_Publishing.getElement(publish) + uda = UnoDataAware.attachCheckBox(p, "cp_Publish", checkbox, True) + uda.Inverse = True + uda.disableObjects = [textbox] + self.pubAware.append(uda) + if isLabel: + aux = UnoDataAware.attachLabel(p, "cp_URL", textbox, False) + else: + aux = UnoDataAware.attachEditControl(p, "cp_URL", textbox, False) + self.pubAware.append(aux) + + ''' + Session load methods + (are used both on the start of the wizard and + when the user loads a session) + + Is called when a new session/settings is + loaded. <br/> + Checks the documents (validate), fills the + documents listbox, and changes the + DataAware data objects to the + new session's objects.<br/> + Task advances 4 times in the mount method, + and ??? times for each document in the session. + ''' + + def mount(self, session, task, refreshStyle, xC): + ''' + This checks the documents. If the user + chooses to cancel, the session is not loaded. + ''' + checkContent(session.cp_Content, task, xC) + settings.cp_DefaultSession = session; + mount(session.cp_Content) + task.advance(True) + mount(session.cp_Design, self.designAware) + mount(session.cp_GeneralInfo, self.genAware) + task.advance(True) + mount(session.cp_Publishing.getElement(LOCAL_PUBLISHER), 0) + mount(session.cp_Publishing.getElement(FTP_PUBLISHER), 1) + mount(session.cp_Publishing.getElement(ZIP_PUBLISHER), 2) + task.advance(True) + self.sessionNameDA.setDataObject(session, True) + Helper.setUnoPropertyValue( + chkSaveSettings.Model, PropertyNames.PROPERTY_STATE, 1) + self.docListDA.updateUI() + task.advance(True) + if refreshStyle: + self.refreshStylePreview() + self.updateIconsetText() + + ''' + used to mount the publishing objects. This is somehow cryptic - + there are 6 DataAware objects, 2 for each Publishing Object (CGPublish). + All 6 reside on one Vector (pubAware). + Since, otherwise than other DataAware objects, different + Objects on the same Vector need different DataObjectBinding, + I use this method... + @param data the CGPublish object + @param i the number of the object (0 = local, 1 = ftp, 2 = zip) + ''' + + def mountDataAware(self, data, i): + self.pubAware.get(i * 2).setDataObject(data, True) + self.pubAware.get(i * 2 + 1).setDataObject(data, True) + + ''' + Fills the documents listbox. + @param root the CGContent object + that contains the documents (a ListModel) + ''' + + def fillDocumentList(self, root): + ListModelBinder.fillList(self.lstDocuments, root.cp_Documents.childrenList, None) + #COMMENTED + #self.docsBinder.setListModel(root.cp_Documents) + self.disableDocUpDown() + + ''' + changes the DataAwares Objects' (in + the gioen list) DataObject to the + @param data + @param list + ''' + + def mountList(self, data, _list): + for i in _list: + i.setDataObject(data, True) + + ''' + Checks if the document specified by the given CGDocument + object (cp_URL) exists. Calls also the validate(...) method + of this document. + If the document does not exist, it asks the user whether + to specify a new URL, or forget about this document. + @param doc the document to check. + @param task while loading a session, a status is + displayed, using the Task object to monitor progress. + @return true if the document is ok (a file exists in the given url). + ''' + + @classmethod + def checkDocument(self,xmsf, doc, task, xC): + doc.validate(xmsf, task) + return True + '''except IOError: + relocate = SystemDialog.showMessageBox( + self.xMSF, xC.Peer, "WarningBox", + VclWindowPeerAttribute.YES_NO + VclWindowPeerAttribute.DEF_NO, + getFileAccess().getPath(doc.cp_URL, "") + "\n\n" + \ + self.resources.resSpecifyNewFileLocation) + if relocate == 2: + _file = getDocAddDialog().callOpenDialog( + False, FileAccess.getParentDir(doc.cp_URL)) + if _file is None: + return False + else: + doc.cp_URL = _file[0] + return checkDocument(doc, task, xC) + + else: + return False + + except IllegalArgumentException, iaex: + #file is a directory + SystemDialog.showMessage( + self.xMSF, xControl.Peer, + self.resources.resErrIsDirectory.replace( + "%FILENAME", getFileAccess().getPath(doc.cp_URL, "")), + ErrorHandler.ERROR_PROCESS_FATAL) + return False + except Exception: + #something went wrong. + traceback.print_exc() + SystemDialog.showMessage( + self.xMSF, xControl.Peer, + self.resources.resErrDocValidate.replace( + "%FILENAME", getFileAccess().getPath(doc.cp_URL, "")), + ErrorHandler.ERROR_PROCESS_FATAL) + return False + ''' + + ''' + Checks the documents contained in this content. + @param content + @param task + ''' + + def checkContent(self, content, task, xC): + i = 0 + while i < content.cp_Documents.getSize(): + if not checkDocument(content.cp_Documents.getElementAt(i), task, xC): + # I use here 'i--' since, when the document is removed + # an index change accures + content.cp_Documents.remove(i) + i -= 1 + i += 1 + + ''' + Disables/enables the docUpDown buttons (step 2) + according to the currently selected document + (no doc selected - both disbaled, last doc selected, + down disabled and so on...) + ''' + + def disableDocUpDown(self): + try: + if len(WWD_Startup.selectedDoc) == 0: + aux = False + aux2 = False + else: + if WWD_Startup.selectedDoc[0] == 0: + aux = False + else: + aux = True + + if WWD_Startup.selectedDoc[0] + 1 < \ + WWD_General.settings.cp_DefaultSession.cp_Content.cp_Documents.getSize(): + aux2 = True + else: + aux2 = False + + self.setEnabled(self.btnDocUp, aux) + self.setEnabled(self.btnDocDown, aux2) + except Exception: + traceback.print_exc() + + def updateBackgroundText(self): + bg = \ + WWD_General.settings.cp_DefaultSession.cp_Design.cp_BackgroundImage + if bg is None or bg == "": + bg = self.resources.resBackgroundNone + else: + bg = FileAccess.getPathFilename(getFileAccess().getPath(bg, None)) + + Helper.setUnoPropertyValue( + self.txtBackground.Model, PropertyNames.PROPERTY_LABEL, bg) + + def updateIconsetText(self): + iconset = WWD_General.settings.cp_DefaultSession.cp_Design.cp_IconSet + if iconset is None or iconset == "": + iconsetName = self.resources.resIconsetNone + else: + IconSet = WWD_General.settings.cp_IconSets.getElement(iconset) + if IconSet is None: + iconsetName = self.resources.resIconsetNone + else: + iconsetName = IconSet.cp_Name + + Helper.setUnoPropertyValue( + txtIconset.Model, PropertyNames.PROPERTY_LABEL, iconsetName) + + ''' + refreshes the style preview. + I also call here "updateBackgroundtext", because always + when the background is changed, this method + has to be called, so I am walking on the safe side here... + ''' + + def refreshStylePreview(self): + try: + WWD_General.settings.cp_DefaultSession.cp_Design.cp_Style = \ + "style" + \ + str(WWD_General.settings.cp_DefaultSession.cp_Design.cp_Style) + self.updateBackgroundText() + self.stylePreview.refresh(WWD_General.settings.cp_DefaultSession.getStyle(), WWD_General.settings.cp_DefaultSession.cp_Design.cp_BackgroundImage) + self.dpStylePreview.reload(self.xMSF) + except Exception: + traceback.print_exc() diff --git a/wizards/com/sun/star/wizards/web/WWHID.py b/wizards/com/sun/star/wizards/web/WWHID.py new file mode 100644 index 000000000000..28b3aaaa892e --- /dev/null +++ b/wizards/com/sun/star/wizards/web/WWHID.py @@ -0,0 +1,140 @@ +HID0_WEBWIZARD = 34200 + 0 +HID0_HELP = 34200 + 1 +HID0_NEXT = 34200 + 2 +HID0_PREV = 34200 + 3 +HID0_CREATE = 34200 + 4 +HID0_CANCEL = 34200 + 5 +HID0_STATUS_DIALOG = 34200 + 6 #step 1 +HID1_LST_SESSIONS = 34200 + 7 +HID1_BTN_DEL_SES = 34200 + 9 #step 2 +HID2_LST_DOCS = 34200 + 10 +HID2_BTN_ADD_DOC = 34200 + 11 +HID2_BTN_REM_DOC = 34200 + 12 +HID2_BTN_DOC_UP = 34200 + 13 +HID2_BTN_DOC_DOWN = 34200 + 14 +HID2_TXT_DOC_TITLE = 34200 + 15 +HID2_TXT_DOC_DESC = 34200 + 16 +HID2_TXT_DOC_AUTHOR = 34200 + 17 +HID2_LST_DOC_EXPORT = 34200 + 18 +HID2_STATUS_ADD_DOCS = 34200 + 19 #step 3 +HID3_IL_LAYOUTS_IMG1 = 34200 + 20 +HID3_IL_LAYOUTS_IMG2 = 34200 + 21 +HID3_IL_LAYOUTS_IMG3 = 34200 + 22 +HID3_IL_LAYOUTS_IMG4 = 34200 + 23 +HID3_IL_LAYOUTS_IMG5 = 34200 + 24 +HID3_IL_LAYOUTS_IMG6 = 34200 + 25 +HID3_IL_LAYOUTS_IMG7 = 34200 + 26 +HID3_IL_LAYOUTS_IMG8 = 34200 + 27 +HID3_IL_LAYOUTS_IMG9 = 34200 + 28 +HID3_IL_LAYOUTS_IMG10 = 34200 + 29 +HID3_IL_LAYOUTS_IMG11 = 34200 + 30 +HID3_IL_LAYOUTS_IMG12 = 34200 + 31 +HID3_IL_LAYOUTS_IMG13 = 34200 + 32 +HID3_IL_LAYOUTS_IMG14 = 34200 + 33 +HID3_IL_LAYOUTS_IMG15 = 34200 + 34 #step 4 +HID4_CHK_DISPLAY_FILENAME = 34200 + 35 +HID4_CHK_DISPLAY_DESCRIPTION = 34200 + 36 +HID4_CHK_DISPLAY_AUTHOR = 34200 + 37 +HID4_CHK_DISPLAY_CR_DATE = 34200 + 38 +HID4_CHK_DISPLAY_UP_DATE = 34200 + 39 +HID4_CHK_DISPLAY_FORMAT = 34200 + 40 +HID4_CHK_DISPLAY_F_ICON = 34200 + 41 +HID4_CHK_DISPLAY_PAGES = 34200 + 42 +HID4_CHK_DISPLAY_SIZE = 34200 + 43 +HID4_GRP_OPTIMAIZE_640 = 34200 + 44 +HID4_GRP_OPTIMAIZE_800 = 34200 + 45 +HID4_GRP_OPTIMAIZE_1024 = 34200 + 46 #step 5 +HID5_LST_STYLES = 34200 + 47 +HID5_BTN_BACKGND = 34200 + 48 +HID5_BTN_ICONS = 34200 + 49 #step 6 +HID6_TXT_SITE_TITLE = 34200 + 50 +HID6_TXT_SITE_ICON = 34200 + 51 +HID6_BTN_SITE_ICON = 34200 + 52 +HID6_TXT_SITE_DESC = 34200 + 53 +HID6_TXT_SITE_KEYWRDS = 34200 + 54 +HID6_DATE_SITE_CREATED = 34200 + 55 +HID6_DATE_SITE_UPDATED = 34200 + 56 +HID6_NUM_SITE_REVISTS = 34200 + 57 +HID6_TXT_SITE_EMAIL = 34200 + 58 +HID6_TXT_SITE_COPYRIGHT = 34200 + 59 #step 7 +HID7_BTN_PREVIEW = 34200 + 60 +HID7_CHK_PUBLISH_LOCAL = 34200 + 61 +HID7_TXT_LOCAL = 34200 + 62 +HID7_BTN_LOCAL = 34200 + 63 +HID7_CHK_PUBLISH_ZIP = 34200 + 64 +HID7_TXT_ZIP = 34200 + 65 +HID7_BTN_ZIP = 34200 + 66 +HID7_CHK_PUBLISH_FTP = 34200 + 67 +HID7_BTN_FTP = 34200 + 69 +HID7_CHK_SAVE = 34200 + 70 +HID7_TXT_SAVE = 34200 + 71 #web wizard backgrounds dialog +HID_BG = 34200 + 90 +HID_BG_BTN_OTHER = 34200 + 91 +HID_BG_BTN_NONE = 34200 + 92 +HID_BG_BTN_OK = 34200 + 93 +HID_BG_BTN_CANCEL = 34200 + 94 +HID_BG_BTN_BACK = 34200 + 95 +HID_BG_BTN_FW = 34200 + 96 +HID_BG_BTN_IMG1 = 34200 + 97 +HID_BG_BTN_IMG2 = 34200 + 98 +HID_BG_BTN_IMG3 = 34200 + 99 +HID_BG_BTN_IMG4 = 34200 + 100 +HID_BG_BTN_IMG5 = 34200 + 101 +HID_BG_BTN_IMG6 = 34200 + 102 +HID_BG_BTN_IMG7 = 34200 + 103 +HID_BG_BTN_IMG8 = 34200 + 104 +HID_BG_BTN_IMG9 = 34200 + 105 +HID_BG_BTN_IMG10 = 34200 + 106 +HID_BG_BTN_IMG11 = 34200 + 107 +HID_BG_BTN_IMG12 = 34200 + 108 +HID_BG_BTN_IMG13 = 34200 + 109 +HID_BG_BTN_IMG14 = 34200 + 100 +HID_BG_BTN_IMG15 = 34200 + 111 +HID_BG_BTN_IMG16 = 34200 + 112 #web wizard icons sets dialog +HID_IS = 41000 + 0 +HID_IS_ICONSETS = 41000 + 1 +HID_IS_BTN_NONE = 41000 + 2 +HID_IS_BTN_OK = 41000 + 3 +HID_IS_BTN_IMG1 = 41000 + 5 +HID_IS_BTN_IMG2 = 41000 + 6 +HID_IS_BTN_IMG3 = 41000 + 7 +HID_IS_BTN_IMG4 = 41000 + 8 +HID_IS_BTN_IMG5 = 41000 + 9 +HID_IS_BTN_IMG6 = 41000 + 10 +HID_IS_BTN_IMG7 = 41000 + 11 +HID_IS_BTN_IMG8 = 41000 + 12 +HID_IS_BTN_IMG9 = 41000 + 13 +HID_IS_BTN_IMG10 = 41000 + 14 +HID_IS_BTN_IMG11 = 41000 + 15 +HID_IS_BTN_IMG12 = 41000 + 16 +HID_IS_BTN_IMG13 = 41000 + 17 +HID_IS_BTN_IMG14 = 41000 + 18 +HID_IS_BTN_IMG15 = 41000 + 19 +HID_IS_BTN_IMG16 = 41000 + 20 +HID_IS_BTN_IMG17 = 41000 + 21 +HID_IS_BTN_IMG18 = 41000 + 22 +HID_IS_BTN_IMG19 = 41000 + 23 +HID_IS_BTN_IMG20 = 41000 + 24 +HID_IS_BTN_IMG21 = 41000 + 25 +HID_IS_BTN_IMG22 = 41000 + 26 +HID_IS_BTN_IMG23 = 41000 + 27 +HID_IS_BTN_IMG24 = 41000 + 28 +HID_IS_BTN_IMG25 = 41000 + 29 +HID_IS_BTN_IMG26 = 41000 + 30 +HID_IS_BTN_IMG27 = 41000 + 31 +HID_IS_BTN_IMG28 = 41000 + 32 +HID_IS_BTN_IMG29 = 41000 + 33 +HID_IS_BTN_IMG30 = 41000 + 34 +HID_IS_BTN_IMG31 = 41000 + 35 +HID_IS_BTN_IMG32 = 41000 + 36 + +# web wizard ftp dialog +HID_FTP = 41000 + 40 +HID_FTP_SERVER = 41000 + 41 +HID_FTP_USERNAME = 41000 + 42 +HID_FTP_PASS = 41000 + 43 +HID_FTP_TEST = 41000 + 44 +HID_FTP_TXT_PATH = 41000 + 45 +HID_FTP_BTN_PATH = 41000 + 46 +HID_FTP_OK = 41000 + 47 +HID_FTP_CANCEL = 41000 + 48 diff --git a/wizards/com/sun/star/wizards/web/WebWizardConst.py b/wizards/com/sun/star/wizards/web/WebWizardConst.py new file mode 100644 index 000000000000..1903dcbcd01a --- /dev/null +++ b/wizards/com/sun/star/wizards/web/WebWizardConst.py @@ -0,0 +1,39 @@ +LSTLOADSETTINGS_ITEM_CHANGED = "sessionSelected" # "lstLoadSettingsItemChanged" +BTNLOADSESSION_ACTION_PERFORMED = "loadSession" # "btnLoadSessionActionPerformed" +BTNDELSESSION_ACTION_PERFORMED = "delSession" # "btnDelSessionActionPerformed" +BTNADDDOC_ACTION_PERFORMED = "addDocument" # "btnAddDocActionPerformed" +BTNREMOVEDOC_ACTION_PERFORMED = "removeDocument" # "btnRemoveDocActionPerformed" +BTNDOCUP_ACTION_PERFORMED = "docUp" # "btnDocUpActionPerformed" +BTNDOCDOWN_ACTION_PERFORMED = "docDown" # "btnDocDownActionPerformed" +LSTSTYLES_ITEM_CHANGED = "refreshStylePreview" # "lstStylesItemChanged" +BTNBACKGROUNDS_ACTION_PERFORMED = "chooseBackground" # "btnBackgroundsActionPerformed" +BTNICONSETS_ACTION_PERFORMED = "chooseIconset" # "btnIconSetsActionPerformed" +BTNFAVICON_ACTION_PERFORMED = "chooseFavIcon" # "btnFavIconActionPerformed" +BTNPREVIEW_ACTION_PERFORMED = "documentPreview" # "btnPreviewActionPerformed" +BTNFTP_ACTION_PERFORMED = "setFTPPublish" # "btnFTPActionPerformed" +CHKLOCALDIR_ITEM_CHANGED = "checkPublish" # "chkLocalDirItemChanged" +CHKSAVESETTINGS_ITEM_CHANGED = "checkPublish" # "chkSaveSettingsItemChanged" +TXTSAVESETTINGS_TEXT_CHANGED = "checkPublish" # "txtSaveSettingsTextChanged" +BTNLOCALDIR_ACTION_PERFORMED = "setPublishLocalDir" # "btnLocalDirActionPerformed" +BTNZIP_ACTION_PERFORMED = "setZipFilename" # "btnZipActionPerformed" +CONFIG_PATH = "/org.openoffice.Office.WebWizard/WebWizard" +CONFIG_READ_PARAM = "cp_" +TASK = "WWIZ" +TASK_PREPARE = "t-prep" +LOCAL_PUBLISHER = "local" +FTP_PUBLISHER = "ftp" +ZIP_PUBLISHER = "zip" +TASK_EXPORT = "t_exp" +TASK_EXPORT_PREPARE = "t_exp_prep" +TASK_EXPORT_DOCUMENTS = "t_exp_docs" +TASK_GENERATE_PREPARE = "t_gen_prep" +TASK_GENERATE_XSL = "t_gen_x" +TASK_GENERATE_COPY = "t_gen_cp" +TASK_PUBLISH_PREPARE = "t_pub_prep" +TASK_FINISH = "t_fin" + +''' +when the user adds more than this number +of documents to the list, a status dialog opens. +''' +MIN_ADD_FILES_FOR_DIALOG = 2 diff --git a/wizards/com/sun/star/wizards/web/WebWizardDialog.py b/wizards/com/sun/star/wizards/web/WebWizardDialog.py new file mode 100644 index 000000000000..621d1da2510d --- /dev/null +++ b/wizards/com/sun/star/wizards/web/WebWizardDialog.py @@ -0,0 +1,713 @@ +from ui.WizardDialog import * +from WebWizardDialogResources import WebWizardDialogResources +from WebWizardConst import * +from WWHID import * +from ui.ImageList import ImageList +from com.sun.star.awt import Size +from com.sun.star.awt.FontUnderline import SINGLE +from com.sun.star.awt.FontFamily import ROMAN +from com.sun.star.awt.FontSlant import ITALIC +from com.sun.star.awt.ImageAlign import LEFT + +class WebWizardDialog(WizardDialog): + PROPNAMES_LBL = (PropertyNames.PROPERTY_HEIGHT, + PropertyNames.PROPERTY_LABEL, + PropertyNames.PROPERTY_NAME, + PropertyNames.PROPERTY_POSITION_X, + PropertyNames.PROPERTY_POSITION_Y, + PropertyNames.PROPERTY_STEP, + PropertyNames.PROPERTY_TABINDEX, + PropertyNames.PROPERTY_WIDTH) + PROPNAMES_CHKBOX = (PropertyNames.PROPERTY_HEIGHT, + PropertyNames.PROPERTY_HELPURL, + PropertyNames.PROPERTY_LABEL, + PropertyNames.PROPERTY_NAME, + PropertyNames.PROPERTY_POSITION_X, + PropertyNames.PROPERTY_POSITION_Y, + PropertyNames.PROPERTY_STATE, + PropertyNames.PROPERTY_STEP, + PropertyNames.PROPERTY_TABINDEX, + PropertyNames.PROPERTY_WIDTH) + PROPNAMES_BUTTON = (PropertyNames.PROPERTY_HEIGHT, + PropertyNames.PROPERTY_HELPURL, + PropertyNames.PROPERTY_LABEL, + PropertyNames.PROPERTY_NAME, + PropertyNames.PROPERTY_POSITION_X, + PropertyNames.PROPERTY_POSITION_Y, + PropertyNames.PROPERTY_STEP, + PropertyNames.PROPERTY_TABINDEX, + PropertyNames.PROPERTY_WIDTH) + PROPNAMES_TXT = (PropertyNames.PROPERTY_HEIGHT, + PropertyNames.PROPERTY_HELPURL, + PropertyNames.PROPERTY_NAME, + PropertyNames.PROPERTY_POSITION_X, + PropertyNames.PROPERTY_POSITION_Y, + PropertyNames.PROPERTY_STEP, + PropertyNames.PROPERTY_TABINDEX, + PropertyNames.PROPERTY_WIDTH) + PROPNAMES_TXT_2 = (PropertyNames.PROPERTY_HEIGHT, + PropertyNames.PROPERTY_HELPURL, + PropertyNames.PROPERTY_NAME, + PropertyNames.PROPERTY_POSITION_X, + PropertyNames.PROPERTY_POSITION_Y, "ReadOnly", + PropertyNames.PROPERTY_STEP, + PropertyNames.PROPERTY_TABINDEX, + PropertyNames.PROPERTY_WIDTH) + PROPNAMES_TITLE = ("FontDescriptor", + PropertyNames.PROPERTY_HEIGHT, + PropertyNames.PROPERTY_LABEL, + PropertyNames.PROPERTY_MULTILINE, + PropertyNames.PROPERTY_NAME, + PropertyNames.PROPERTY_POSITION_X, + PropertyNames.PROPERTY_POSITION_Y, + PropertyNames.PROPERTY_STEP, + PropertyNames.PROPERTY_TABINDEX, + PropertyNames.PROPERTY_WIDTH) + + def __init__(self, xmsf): + super(WebWizardDialog, self).__init__(xmsf, HID0_WEBWIZARD) + #Load Resources + self.resources = WebWizardDialogResources(xmsf) + #set dialog properties... + Helper.setUnoPropertyValues(self.xDialogModel,( + "Closeable", + PropertyNames.PROPERTY_HEIGHT, + PropertyNames.PROPERTY_HELPURL, "Moveable", + PropertyNames.PROPERTY_NAME, + PropertyNames.PROPERTY_POSITION_X, + PropertyNames.PROPERTY_POSITION_Y, + PropertyNames.PROPERTY_STEP, + PropertyNames.PROPERTY_TABINDEX, "Title", + PropertyNames.PROPERTY_WIDTH), + (True, 210, HelpIds.getHelpIdString(HID0_WEBWIZARD), True, + "WebWizardDialog", 102, 52, 1, 6, + self.resources.resWebWizardDialog_title, 330)) + self.fontDescriptor0 = \ + uno.createUnoStruct('com.sun.star.awt.FontDescriptor') + self.fontDescriptor1 = \ + uno.createUnoStruct('com.sun.star.awt.FontDescriptor') + self.fontDescriptor4 = \ + uno.createUnoStruct('com.sun.star.awt.FontDescriptor') + self.fontDescriptor5 = \ + uno.createUnoStruct('com.sun.star.awt.FontDescriptor') + self.fontDescriptor6 = \ + uno.createUnoStruct('com.sun.star.awt.FontDescriptor') + self.fontDescriptor7 = \ + uno.createUnoStruct('com.sun.star.awt.FontDescriptor') + self.imgIconsPrev = range(8) + #Set member- self.fontDescriptors... + self.fontDescriptor0.Weight = 100 + self.fontDescriptor1.Weight = 150 + self.fontDescriptor1.Underline = SINGLE + self.fontDescriptor4.Weight = 150 + self.fontDescriptor5.Name = "Angsana New" + self.fontDescriptor5.Height = 16 + self.fontDescriptor5.StyleName = "Regular" + self.fontDescriptor5.Family = ROMAN + self.fontDescriptor5.Weight = 100 + self.fontDescriptor6.Name = "Andalus" + self.fontDescriptor6.Height = 22 + self.fontDescriptor6.StyleName = "Bold Italic" + self.fontDescriptor6.Weight = 150 + self.fontDescriptor6.Slant = ITALIC + self.fontDescriptor7.Name = "StarSymbol" + self.fontDescriptor7.Height = 9 + self.fontDescriptor7.StyleName = "Regular" + self.fontDescriptor7.Weight = 100 + + #build components + + def buildStep1(self): + tabIndex = 100 + self.insertLabel("lbIntroTitle", WebWizardDialog.PROPNAMES_TITLE, + (self.fontDescriptor4, 16, self.resources.reslbIntroTitle_value, + True, "lbIntroTitle", 91, 8, 1, tabIndex + 1, 232)) + self.insertLabel("lblIntroduction", + (PropertyNames.PROPERTY_HEIGHT, + PropertyNames.PROPERTY_LABEL, + PropertyNames.PROPERTY_MULTILINE, + PropertyNames.PROPERTY_NAME, + PropertyNames.PROPERTY_POSITION_X, + PropertyNames.PROPERTY_POSITION_Y, + PropertyNames.PROPERTY_STEP, + PropertyNames.PROPERTY_TABINDEX, + PropertyNames.PROPERTY_WIDTH), + (119, self.resources.reslblIntroduction_value, True, + "lblIntroduction", 97, 28, 1, tabIndex + 1, 226)) + self.insertFixedLine("lnLoadSettings", WebWizardDialog.PROPNAMES_TXT, + (2, "", "lnLoadSettings", 91, 147, 1, tabIndex + 1, 234)) + self.lblLoadSettings = self.insertLabel("lblLoadSettings", + (PropertyNames.PROPERTY_HEIGHT, + PropertyNames.PROPERTY_LABEL, + PropertyNames.PROPERTY_MULTILINE, + PropertyNames.PROPERTY_NAME, + PropertyNames.PROPERTY_POSITION_X, + PropertyNames.PROPERTY_POSITION_Y, + PropertyNames.PROPERTY_STEP, + PropertyNames.PROPERTY_TABINDEX, + PropertyNames.PROPERTY_WIDTH), + (8, self.resources.reslblLoadSettings_value, True, + "lblLoadSettings", 97, 153, 1, tabIndex + 1, 226)) + self.lstLoadSettings = self.insertListBox( + "lstLoadSettings", None, LSTLOADSETTINGS_ITEM_CHANGED,("Dropdown", + PropertyNames.PROPERTY_HEIGHT, + PropertyNames.PROPERTY_HELPURL, "LineCount", + PropertyNames.PROPERTY_NAME, + PropertyNames.PROPERTY_POSITION_X, + PropertyNames.PROPERTY_POSITION_Y, + PropertyNames.PROPERTY_STEP, + PropertyNames.PROPERTY_TABINDEX, + PropertyNames.PROPERTY_WIDTH), + (True, 12, HelpIds.getHelpIdString(HID1_LST_SESSIONS), 14, + "lstLoadSettings", 97, 165, 1, tabIndex + 1, 173), self) + self.btnDelSession = self.insertButton( + "btnDelSession", BTNDELSESSION_ACTION_PERFORMED, + (PropertyNames.PROPERTY_ENABLED, + PropertyNames.PROPERTY_HEIGHT, + PropertyNames.PROPERTY_HELPURL, "ImageAlign", + PropertyNames.PROPERTY_LABEL, + PropertyNames.PROPERTY_NAME, + PropertyNames.PROPERTY_POSITION_X, + PropertyNames.PROPERTY_POSITION_Y, + PropertyNames.PROPERTY_STEP, + PropertyNames.PROPERTY_TABINDEX, + PropertyNames.PROPERTY_WIDTH), + (False, 14, HelpIds.getHelpIdString(HID1_BTN_DEL_SES), LEFT, + self.resources.resbtnDelSession_value, "btnDelSession", + 274, 164, 1, tabIndex + 1, 50), self) + + def buildStep2(self): + tabIndex = 200 + self.lblContentTitle = self.insertLabel( + "lblContentTitle", WebWizardDialog.PROPNAMES_TITLE, + (self.fontDescriptor4, 16, self.resources.reslblContentTitle_value, + True, "lblContentTitle", 91, 8, 2, tabIndex + 1, 232)) + self.lblSiteContent = self.insertLabel( + "lblSiteContent", WebWizardDialog.PROPNAMES_LBL, + (8, self.resources.reslblSiteContent_value, + "lblSiteContent", 97, 28, 2, tabIndex + 1, 105)) + self.lstDocuments = self.insertListBox( + "lstDocuments", None, None, + (PropertyNames.PROPERTY_HEIGHT, + PropertyNames.PROPERTY_HELPURL, + "LineCount", + PropertyNames.PROPERTY_NAME, + PropertyNames.PROPERTY_POSITION_X, + PropertyNames.PROPERTY_POSITION_Y, + PropertyNames.PROPERTY_STEP, + PropertyNames.PROPERTY_TABINDEX, + PropertyNames.PROPERTY_WIDTH), + (123, HelpIds.getHelpIdString(HID2_LST_DOCS), + 9, "lstDocuments", 97, 38, 2, tabIndex + 1, 103), self) + self.btnAddDoc = self.insertButton( + "btnAddDoc", BTNADDDOC_ACTION_PERFORMED, + WebWizardDialog.PROPNAMES_BUTTON, + (14, HelpIds.getHelpIdString(HID2_BTN_ADD_DOC), + self.resources.resbtnAddDoc_value, "btnAddDoc", 97, 165, 2, + tabIndex + 1, 50), self) + self.btnRemoveDoc = self.insertButton( + "btnRemoveDoc", BTNREMOVEDOC_ACTION_PERFORMED, + WebWizardDialog.PROPNAMES_BUTTON, + (14, HelpIds.getHelpIdString(HID2_BTN_REM_DOC), + self.resources.resbtnRemoveDoc_value, "btnRemoveDoc", 150, 165, + 2, tabIndex + 1, 50), self) + self.btnDocUp = self.insertButton( + "btnDocUp", BTNDOCUP_ACTION_PERFORMED, + ("FontDescriptor", + PropertyNames.PROPERTY_HEIGHT, + PropertyNames.PROPERTY_HELPURL, + PropertyNames.PROPERTY_LABEL, + PropertyNames.PROPERTY_NAME, + PropertyNames.PROPERTY_POSITION_X, + PropertyNames.PROPERTY_POSITION_Y, + PropertyNames.PROPERTY_STEP, + PropertyNames.PROPERTY_TABINDEX, + PropertyNames.PROPERTY_WIDTH), + (self.fontDescriptor7, 14, HelpIds.getHelpIdString(HID2_BTN_DOC_UP), + self.resources.resbtnDocUp_value, "btnDocUp", + 205, 87, 2, tabIndex + 1, 18), self) + self.btnDocDown = self.insertButton( + "btnDocDown", BTNDOCDOWN_ACTION_PERFORMED,( + "FontDescriptor", + PropertyNames.PROPERTY_HEIGHT, + PropertyNames.PROPERTY_HELPURL, + PropertyNames.PROPERTY_LABEL, + PropertyNames.PROPERTY_NAME, + PropertyNames.PROPERTY_POSITION_X, + PropertyNames.PROPERTY_POSITION_Y, + PropertyNames.PROPERTY_STEP, + PropertyNames.PROPERTY_TABINDEX, + PropertyNames.PROPERTY_WIDTH), + (self.fontDescriptor7, 14, HelpIds.getHelpIdString(HID2_BTN_DOC_DOWN), + self.resources.resbtnDocDown_value, "btnDocDown", 205, + 105, 2, tabIndex + 1, 18), self) + self.lblDocExportFormat = self.insertLabel( + "lblDocExportFormat", WebWizardDialog.PROPNAMES_LBL, + (8, self.resources.reslblDocExportFormat_value, + "lblDocExportFormat", 235, 28, 2, tabIndex + 1, 89)) + self.lstDocTargetType = self.insertListBox("lstDocTargetType", None, None, + ("Dropdown", + PropertyNames.PROPERTY_HEIGHT, + PropertyNames.PROPERTY_HELPURL, "LineCount", + PropertyNames.PROPERTY_NAME, + PropertyNames.PROPERTY_POSITION_X, + PropertyNames.PROPERTY_POSITION_Y, + PropertyNames.PROPERTY_STEP, + PropertyNames.PROPERTY_TABINDEX, + PropertyNames.PROPERTY_WIDTH), + (True, 12, HelpIds.getHelpIdString(HID2_LST_DOC_EXPORT), 14, + "lstDocTargetType", 235, 38, 2, tabIndex + 1, 89), self) + self.lnDocsInfo = self.insertFixedLine( + "lnDocsInfo", WebWizardDialog.PROPNAMES_LBL, + (8, self.resources.reslnDocsInfo_value, "lnDocsInfo", + 235, 66, 2, tabIndex + 1, 90)) + self.lblDocTitle = self.insertLabel( + "lblDocTitle", WebWizardDialog.PROPNAMES_LBL, + (8, self.resources.reslblDocTitle_value, "lblDocTitle", + 235, 78, 2, tabIndex + 1, 89)) + self.txtDocTitle = self.insertTextField( + "txtDocTitle", None, WebWizardDialog.PROPNAMES_TXT, + (12, HelpIds.getHelpIdString(HID2_TXT_DOC_TITLE), "txtDocTitle", + 235, 88, 2, tabIndex + 1, 89), self) + self.lblDocInfo = self.insertLabel( + "lblDocInfo", WebWizardDialog.PROPNAMES_LBL, + (8, self.resources.reslblDocInfo_value, "lblDocInfo", + 235, 103, 2, tabIndex + 1, 89)) + self.txtDocInfo = self.insertTextField( + "txtDocInfo", None,(PropertyNames.PROPERTY_HEIGHT, + PropertyNames.PROPERTY_HELPURL, + PropertyNames.PROPERTY_MULTILINE, + PropertyNames.PROPERTY_NAME, + PropertyNames.PROPERTY_POSITION_X, + PropertyNames.PROPERTY_POSITION_Y, + PropertyNames.PROPERTY_STEP, + PropertyNames.PROPERTY_TABINDEX, + PropertyNames.PROPERTY_WIDTH), + (40, HelpIds.getHelpIdString(HID2_TXT_DOC_DESC), True, + "txtDocInfo", 235, 113, 2, tabIndex + 1, 89), self) + self.lblDocAuthor = self.insertLabel( + "lblDocAuthor", WebWizardDialog.PROPNAMES_LBL, + (8, self.resources.reslblDocAuthor_value, "lblDocAuthor", + 235, 155, 2, tabIndex + 1, 89)) + self.txtDocAuthor = self.insertTextField( + "txtDocAuthor", None, WebWizardDialog.PROPNAMES_TXT, + (12, HelpIds.getHelpIdString(HID2_TXT_DOC_AUTHOR), + "txtDocAuthor", 235, 165, 2, tabIndex + 1, 89), self) + + def buildStep3(self): + self.insertLabel("lblLayoutTitle", WebWizardDialog.PROPNAMES_TITLE, + (self.fontDescriptor4, 16, self.resources.reslblLayoutTitle_value, + True, "lblLayoutTitle", 91, 8, 3, 29, 232)) + self.lblLayouts = self.insertLabel("lblLayouts", + WebWizardDialog.PROPNAMES_LBL, + (8, self.resources.reslblLayouts_value, "lblLayouts", + 97, 28, 3, 30, 206)) + + def buildStep4(self): + self.insertLabel("lblLayout2Title", WebWizardDialog.PROPNAMES_TITLE, + (self.fontDescriptor4, 16, self.resources.reslblLayout2Title_value, + True, "lblLayout2Title", 91, 8, 4, 33, 232)) + self.lnDisplay = self.insertLabel("lblDisplay", + (PropertyNames.PROPERTY_HEIGHT, + PropertyNames.PROPERTY_LABEL, + PropertyNames.PROPERTY_MULTILINE, + PropertyNames.PROPERTY_NAME, + PropertyNames.PROPERTY_POSITION_X, + PropertyNames.PROPERTY_POSITION_Y, + PropertyNames.PROPERTY_STEP, + PropertyNames.PROPERTY_TABINDEX, + PropertyNames.PROPERTY_WIDTH), + (16, self.resources.reslblDisplay_value, True, + "lblDisplay", 97, 28, 4, 34, 226)) + self.chkDocFilename = self.insertCheckBox("chkDocFilename", None, + WebWizardDialog.PROPNAMES_CHKBOX, + (8, HelpIds.getHelpIdString(HID4_CHK_DISPLAY_FILENAME), + self.resources.reschkDocFilename_value, "chkDocFilename", + 103, 50, 0, 4, 35, 99), self) + self.chbDocDesc = self.insertCheckBox( + "chbDocDesc", None, WebWizardDialog.PROPNAMES_CHKBOX, + (8, HelpIds.getHelpIdString(HID4_CHK_DISPLAY_DESCRIPTION), + self.resources.reschbDocDesc_value, "chbDocDesc", + 103, 60, 0, 4, 36, 99), self) + self.chbDocAuthor = self.insertCheckBox( + "chbDocAuthor", None, WebWizardDialog.PROPNAMES_CHKBOX, + (8, HelpIds.getHelpIdString(HID4_CHK_DISPLAY_AUTHOR), + self.resources.reschbDocAuthor_value, "chbDocAuthor", + 103, 70, 0, 4, 37, 99), self) + self.chkDocCreated = self.insertCheckBox( + "chkDocCreated", None, WebWizardDialog.PROPNAMES_CHKBOX, + (8, HelpIds.getHelpIdString(HID4_CHK_DISPLAY_CR_DATE), + self.resources.reschkDocCreated_value, "chkDocCreated", + 103, 80, 0, 4, 38, 99), self) + self.chkDocChanged = self.insertCheckBox( + "chkDocChanged", None, WebWizardDialog.PROPNAMES_CHKBOX, + (8, HelpIds.getHelpIdString(HID4_CHK_DISPLAY_UP_DATE), + self.resources.reschkDocChanged_value, "chkDocChanged", + 103, 90, 0, 4, 39, 99), self) + self.chkDocFormat = self.insertCheckBox( + "chkDocFormat", None, WebWizardDialog.PROPNAMES_CHKBOX, + (8, HelpIds.getHelpIdString(HID4_CHK_DISPLAY_FORMAT), + self.resources.reschkDocFormat_value, "chkDocFormat", + 200, 50, 0, 4, 40, 110), self) + self.chkDocFormatIcon = self.insertCheckBox( + "chkDocFormatIcon", None, WebWizardDialog.PROPNAMES_CHKBOX, + (8, HelpIds.getHelpIdString(HID4_CHK_DISPLAY_F_ICON), + self.resources.reschkDocFormatIcon_value, "chkDocFormatIcon", + 200, 60, 0, 4, 41, 110), self) + self.chkDocPages = self.insertCheckBox( + "chkDocPages", None, WebWizardDialog.PROPNAMES_CHKBOX, + (8, HelpIds.getHelpIdString(HID4_CHK_DISPLAY_PAGES), + self.resources.reschkDocPages_value, "chkDocPages", + 200,70, 0, 4, 42, 110), self) + self.chkDocSize = self.insertCheckBox( + "chkDocSize", None, WebWizardDialog.PROPNAMES_CHKBOX, + (8, HelpIds.getHelpIdString(HID4_CHK_DISPLAY_SIZE), + self.resources.reschkDocSize_value, "chkDocSize", + 200, 80, 0, 4, 43, 110), self) + self.insertLabel("lblOptimizeFor", WebWizardDialog.PROPNAMES_LBL, + (8, self.resources.reslblOptimizeFor_value, "lblOptimizeFor", + 97, 113, 4, 44, 226)) + self.optOptimize640x480 = self.insertRadioButton( + "optOptimize640x480", None, WebWizardDialog.PROPNAMES_BUTTON, + (10, HelpIds.getHelpIdString(HID4_GRP_OPTIMAIZE_640), + self.resources.resoptOptimize640x480_value, + "optOptimize640x480", 103, 133, 4, 45, 44), self) + self.optOptimize800x600 = self.insertRadioButton( + "optOptimize800x600", None, WebWizardDialog.PROPNAMES_BUTTON, + (10, HelpIds.getHelpIdString(HID4_GRP_OPTIMAIZE_800), + self.resources.resoptOptimize800x600_value, + "optOptimize800x600", 103, 146, 4, 46, 44), self) + self.optOptimize1024x768 = self.insertRadioButton( + "optOptimize1024x768", None, WebWizardDialog.PROPNAMES_BUTTON, + (10, HelpIds.getHelpIdString(HID4_GRP_OPTIMAIZE_1024), + self.resources.resoptOptimize1024x768_value, + "optOptimize1024x768", 103, 158, 4, 47, 44), self) + + def buildStep5(self): + self.lblStyleTitle = self.insertLabel( + "lblStyleTitle", WebWizardDialog.PROPNAMES_TITLE, + (self.fontDescriptor4, 16, self.resources.reslblStyleTitle_value, + True, "lblStyleTitle", 91, 8, 5, 50, 232)) + self.lblStyle = self.insertLabel( + "lblStyle", WebWizardDialog.PROPNAMES_LBL, + (8, self.resources.reslblStyle_value, + "lblStyle", 97, 28, 5, 51, 80)) + self.lstStyles = self.insertListBox( + "lstStyles", None, LSTSTYLES_ITEM_CHANGED,( + "Dropdown", + PropertyNames.PROPERTY_HEIGHT, + PropertyNames.PROPERTY_HELPURL, "LineCount", + PropertyNames.PROPERTY_NAME, + PropertyNames.PROPERTY_POSITION_X, + PropertyNames.PROPERTY_POSITION_Y, + PropertyNames.PROPERTY_STEP, + PropertyNames.PROPERTY_TABINDEX, + PropertyNames.PROPERTY_WIDTH), + (True, 12, HelpIds.getHelpIdString(HID5_LST_STYLES), + 14, "lstStyles", 179, 26, 5, 52, 145), self) + self.insertLabel("lblBackground", WebWizardDialog.PROPNAMES_LBL, + (8, self.resources.reslblBackground, "lblBackground", + 97, 46, 5, 51, 70)) + self.txtBackground = self.insertLabel("txtBackground", + ("Border", + PropertyNames.PROPERTY_HEIGHT, + PropertyNames.PROPERTY_LABEL, + PropertyNames.PROPERTY_NAME, + PropertyNames.PROPERTY_POSITION_X, + PropertyNames.PROPERTY_POSITION_Y, + PropertyNames.PROPERTY_STEP, + PropertyNames.PROPERTY_TABINDEX, + PropertyNames.PROPERTY_WIDTH), + (1, 12, self.resources.resBackgroundNone, + "txtBackground", 179, 44, 5, 52, 90)) + self.btnBackgrounds = self.insertButton( + "btnBackgrounds", BTNBACKGROUNDS_ACTION_PERFORMED, + WebWizardDialog.PROPNAMES_BUTTON, + (14, HelpIds.getHelpIdString(HID5_BTN_BACKGND), + self.resources.resBtnChooseBackground, "btnBackgrounds", + 274, 43, 5, 53, 50), self) + self.insertLabel("lblIconset", WebWizardDialog.PROPNAMES_LBL, + (8, self.resources.reslblIconset, "lblIconset", 97, 64, 5, 51, 70)) + self.insertLabel("txtIconset", + ("Border", + PropertyNames.PROPERTY_HEIGHT, + PropertyNames.PROPERTY_LABEL, + PropertyNames.PROPERTY_NAME, + PropertyNames.PROPERTY_POSITION_X, + PropertyNames.PROPERTY_POSITION_Y, + PropertyNames.PROPERTY_STEP, + PropertyNames.PROPERTY_TABINDEX, + PropertyNames.PROPERTY_WIDTH), + (1, 12, self.resources.resIconsetNone, "txtIconset", + 179, 62, 5, 52, 90)) + self.btnIconSets = self.insertButton( + "btnIconSets", BTNICONSETS_ACTION_PERFORMED, + WebWizardDialog.PROPNAMES_BUTTON, + (14, HelpIds.getHelpIdString(HID5_BTN_ICONS), + self.resources.resBtnChooseIconset, "btnIconSets", + 274, 61, 5, 54, 50), self) + self.insertLabel("lblIconsetInfo", + (PropertyNames.PROPERTY_HEIGHT, + PropertyNames.PROPERTY_LABEL, + PropertyNames.PROPERTY_MULTILINE, + PropertyNames.PROPERTY_NAME, + PropertyNames.PROPERTY_POSITION_X, + PropertyNames.PROPERTY_POSITION_Y, + PropertyNames.PROPERTY_STEP, + PropertyNames.PROPERTY_TABINDEX, + PropertyNames.PROPERTY_WIDTH), + (16, self.resources.reslblIconSetInfo, True, "lblIconsetInfo", + 179, 78, 5, 51, 145)) + self.imgPreview = self.insertImage("imgPreview", + ("BackgroundColor", + PropertyNames.PROPERTY_ENABLED, + PropertyNames.PROPERTY_HEIGHT, + PropertyNames.PROPERTY_IMAGEURL, + PropertyNames.PROPERTY_NAME, + PropertyNames.PROPERTY_POSITION_X, + PropertyNames.PROPERTY_POSITION_Y, "ScaleImage", + PropertyNames.PROPERTY_STEP, + PropertyNames.PROPERTY_TABINDEX, + PropertyNames.PROPERTY_WIDTH), + (0, False, 78, "", "imgPreview", 91, 100, False, 5, 55, 232)) + + def buildStep6(self): + tabIndex = 60 + self.insertLabel("lblTitleGeneralPage", + WebWizardDialog.PROPNAMES_TITLE, + (self.fontDescriptor4, 8, + self.resources.reslblTitleGeneralPage_value, True, + "lblTitleGeneralPage", 90, 9, 6, tabIndex + 1, 232)) + self.insertLabel("lblSiteTitle", WebWizardDialog.PROPNAMES_LBL, + (8, self.resources.reslblSiteTitle_value, "lblSiteTitle", + 97, 28, 6, tabIndex + 1, 80)) + self.txtSiteTitle = self.insertTextField( + "txtSiteTitle", None, WebWizardDialog.PROPNAMES_TXT, + (12, HelpIds.getHelpIdString(HID6_TXT_SITE_TITLE), + "txtSiteTitle", 179, 26, 6, tabIndex + 1, 145), self) + self.insertFixedLine( + "FixedLineMetaData", WebWizardDialog.PROPNAMES_LBL, + (9, self.resources.reslblMetaData, "FixedLineMetaData", + 97, 56, 6, tabIndex + 1, 228)) + self.insertLabel("lblSiteDesc", WebWizardDialog.PROPNAMES_LBL, + (8, self.resources.reslblSiteDesc_value, "lblSiteDesc", + 103, 72, 6, tabIndex + 1, 80)) + self.txtSiteDesc = self.insertTextField( + "txtSiteDesc", None, WebWizardDialog.PROPNAMES_TXT, + (12, HelpIds.getHelpIdString(HID6_TXT_SITE_DESC), "txtSiteDesc", + 179, 70, 6, tabIndex + 1, 145), self) + self.insertLabel( + "lblEmail", WebWizardDialog.PROPNAMES_LBL, + (8, self.resources.reslblEmail_value, "lblEmail", + 103, 90, 6, tabIndex + 1, 80)) + self.txtEmail = self.insertTextField( + "txtEmail", None, WebWizardDialog.PROPNAMES_TXT, + (12, HelpIds.getHelpIdString(HID6_TXT_SITE_EMAIL), "txtEmail", + 179, 87, 6, tabIndex + 1, 145), self) + self.insertLabel("lblCopyright", WebWizardDialog.PROPNAMES_LBL, + (8, self.resources.reslblCopyright_value, "lblCopyright", + 103, 108, 6, tabIndex + 1, 80)) + self.txtCopyright = self.insertTextField( + "txtCopyright", None, WebWizardDialog.PROPNAMES_TXT, + (12, HelpIds.getHelpIdString(HID6_TXT_SITE_COPYRIGHT), + "txtCopyright", 179, 106, 6, tabIndex + 1, 145), self) + self.insertLabel("lblSiteCreated", WebWizardDialog.PROPNAMES_LBL, + (8, self.resources.reslblSiteCreated_value, "lblSiteCreated", + 103, 126, 6, tabIndex + 1, 80)) + self.dateSiteCreated = self.insertDateField("dateSiteCreated", None, + ("Dropdown", + PropertyNames.PROPERTY_HEIGHT, + PropertyNames.PROPERTY_HELPURL, + PropertyNames.PROPERTY_NAME, + PropertyNames.PROPERTY_POSITION_X, + PropertyNames.PROPERTY_POSITION_Y, + PropertyNames.PROPERTY_STEP, + PropertyNames.PROPERTY_TABINDEX, + PropertyNames.PROPERTY_WIDTH), + (True, 12, HelpIds.getHelpIdString(HID6_DATE_SITE_CREATED), + "dateSiteCreated", 179, 124, 6, tabIndex + 1, 49), self) + self.insertLabel("lblSiteUpdated", WebWizardDialog.PROPNAMES_LBL, + (8, self.resources.reslblSiteUpdated_value, "lblSiteUpdated", + 103, 144, 6, tabIndex + 1, 80)) + self.dateSiteUpdate = self.insertDateField("dateSiteUpdate", None, + ("Dropdown", + PropertyNames.PROPERTY_HEIGHT, + PropertyNames.PROPERTY_HELPURL, + PropertyNames.PROPERTY_NAME, + PropertyNames.PROPERTY_POSITION_X, + PropertyNames.PROPERTY_POSITION_Y, + PropertyNames.PROPERTY_STEP, + PropertyNames.PROPERTY_TABINDEX, + PropertyNames.PROPERTY_WIDTH), + (True, 12, HelpIds.getHelpIdString(HID6_DATE_SITE_UPDATED), + "dateSiteUpdate", 179, 142, 6, tabIndex + 1, 49), self) + + def buildStep7(self, disableFTP, exclamationURL): + tabIndex = 700 + self.lblTitlePublish = self.insertLabel( + "lblTitlePublish", WebWizardDialog.PROPNAMES_TITLE, + (self.fontDescriptor4, 16, self.resources.reslblTitlePublish_value, + True, "lblTitlePublish", 91, 8, 7, tabIndex + 1, 232)) + self.FixedLine1 = self.insertFixedLine( + "FixedLine1", WebWizardDialog.PROPNAMES_LBL, + (9, self.resources.resFixedLine1_value, "FixedLine1", + 97, 28, 7, tabIndex + 1, 228)) + self.btnPreview = self.insertButton( + "btnPreview", BTNPREVIEW_ACTION_PERFORMED, + WebWizardDialog.PROPNAMES_BUTTON, + (14, HelpIds.getHelpIdString(HID7_BTN_PREVIEW), + self.resources.resbtnPreview_value, "btnPreview", + 103, 40, 7, tabIndex + 1, 50), self) + self.insertFixedLine( + "lblCreateSite", WebWizardDialog.PROPNAMES_LBL, + (9, self.resources.reslblCreateSite_value, "lblCreateSite", + 97, 56, 7, tabIndex + 1, 228)) + self.chkLocalDir = self.insertCheckBox( + "chkLocalDir", CHKLOCALDIR_ITEM_CHANGED, + WebWizardDialog.PROPNAMES_CHKBOX, + (8, HelpIds.getHelpIdString(HID7_CHK_PUBLISH_LOCAL), + self.resources.reschkLocalDir_value, "chkLocalDir", + 103, 68, 0, 7, tabIndex + 1, 215), self) + self.txtLocalDir = self.insertTextField( + "txtLocalDir", None, WebWizardDialog.PROPNAMES_TXT, + (12, HelpIds.getHelpIdString(HID7_TXT_LOCAL), "txtLocalDir", + 113, 78, 7, tabIndex + 1, 190), self) + self.btnLocalDir = self.insertButton( + "btnLocalDir", BTNLOCALDIR_ACTION_PERFORMED, + WebWizardDialog.PROPNAMES_BUTTON, + (14, HelpIds.getHelpIdString(HID7_BTN_LOCAL), + self.resources.resbtnLocalDir_value, "btnLocalDir", + 308, 77, 7, tabIndex + 1, 16), self) + self.chkZip = self.insertCheckBox( + "chkZip", None, WebWizardDialog.PROPNAMES_CHKBOX, + (9, HelpIds.getHelpIdString(HID7_CHK_PUBLISH_ZIP), + self.resources.reschkZip_value, "chkZip", 103, 96, 0, 7, + tabIndex + 1, 215), self) + self.txtZip = self.insertTextField( + "txtZip", None, WebWizardDialog.PROPNAMES_TXT, + (12, HelpIds.getHelpIdString(HID7_TXT_ZIP), "txtZip", + 113, 108, 7, tabIndex + 1, 190), self) + self.btnZip = self.insertButton( + "btnZip", BTNZIP_ACTION_PERFORMED, + WebWizardDialog.PROPNAMES_BUTTON, + (14, HelpIds.getHelpIdString(HID7_BTN_ZIP), + self.resources.resbtnZip_value, "btnZip", 308, 107, 7, + tabIndex + 1, 16), self) + self.chkFTP = self.insertCheckBox( + "chkFTP", None, WebWizardDialog.PROPNAMES_CHKBOX, + (8, HelpIds.getHelpIdString(HID7_CHK_PUBLISH_FTP), + self.resources.reschkFTP_value, "chkFTP", 103, 124, 0, 7, + tabIndex + 1, 215), self) + if disableFTP: + FTP_STEP = 99 + else: + FTP_STEP = 7 + + self.lblFTP = self.insertLabel( + "lblFTP", ("Border", + PropertyNames.PROPERTY_HEIGHT, + PropertyNames.PROPERTY_NAME, + PropertyNames.PROPERTY_POSITION_X, + PropertyNames.PROPERTY_POSITION_Y, + PropertyNames.PROPERTY_STEP, + PropertyNames.PROPERTY_TABINDEX, + PropertyNames.PROPERTY_WIDTH), + (1, 12, "txtFTP", 113, 134, FTP_STEP, tabIndex + 1, 156)) + self.btnFTP = self.insertButton( + "btnFTP", BTNFTP_ACTION_PERFORMED, + WebWizardDialog.PROPNAMES_BUTTON, + (14, HelpIds.getHelpIdString(HID7_BTN_FTP), + self.resources.resbtnFTP_value, "btnFTP", 274, 133, + FTP_STEP, tabIndex + 1, 50), self) + if disableFTP: + self.insertImage( + "imgFTPDisabled",("BackgroundColor", "Border", + PropertyNames.PROPERTY_ENABLED, + PropertyNames.PROPERTY_HEIGHT, + PropertyNames.PROPERTY_IMAGEURL, + PropertyNames.PROPERTY_NAME, + PropertyNames.PROPERTY_POSITION_X, + PropertyNames.PROPERTY_POSITION_Y, "ScaleImage", + PropertyNames.PROPERTY_STEP, + PropertyNames.PROPERTY_TABINDEX, + PropertyNames.PROPERTY_WIDTH), + (-1, 0, False, 10, exclamationURL, "imgFTPDisabled", 115, + 135, False, 7, tabIndex + 1, 8)) + self.insertLabel( + "lblFTPDisabled",("BackgroundColor", + PropertyNames.PROPERTY_HEIGHT, + PropertyNames.PROPERTY_LABEL, + PropertyNames.PROPERTY_MULTILINE, + PropertyNames.PROPERTY_NAME, + PropertyNames.PROPERTY_POSITION_X, + PropertyNames.PROPERTY_POSITION_Y, + PropertyNames.PROPERTY_STEP, + PropertyNames.PROPERTY_TABINDEX, + PropertyNames.PROPERTY_WIDTH), + (-1, 8, self.resources.reslblFTPDisabled, True, + "lblFTPDisabled", 125, 136, 7, tabIndex + 1, 226)) + + self.insertFixedLine( + "lnSaveSetting", WebWizardDialog.PROPNAMES_TXT, + (2, "", "lnSaveSetting", 97, 151, 7, tabIndex + 1, 228)) + self.chkSaveSettings = self.insertCheckBox( + "chkSaveSettings", CHKSAVESETTINGS_ITEM_CHANGED, + WebWizardDialog.PROPNAMES_CHKBOX, + (9, HelpIds.getHelpIdString(HID7_CHK_SAVE), + self.resources.reschkSaveSettings_value, "chkSaveSettings", + 97, 157, 1, 7, tabIndex + 1, 215), self) + self.insertLabel( + "lblSaveSettings", WebWizardDialog.PROPNAMES_LBL, + (8, self.resources.reslblSaveSettings_value, "lblSaveSettings", + 107, 169, 7, tabIndex + 1, 45)) + self.cbSaveSettings = self.insertComboBox( + "txtSaveSettings", TXTSAVESETTINGS_TEXT_CHANGED, + TXTSAVESETTINGS_TEXT_CHANGED, TXTSAVESETTINGS_TEXT_CHANGED, + ("Autocomplete", "Dropdown", + PropertyNames.PROPERTY_HEIGHT, + PropertyNames.PROPERTY_HELPURL, "LineCount", + PropertyNames.PROPERTY_NAME, + PropertyNames.PROPERTY_POSITION_X, + PropertyNames.PROPERTY_POSITION_Y, + PropertyNames.PROPERTY_STEP, + PropertyNames.PROPERTY_TABINDEX, + PropertyNames.PROPERTY_WIDTH), + (True, True, 12, HelpIds.getHelpIdString(HID7_TXT_SAVE), + 14, "txtSaveSettings", 179, 167, 7, tabIndex + 1, 145), self) + + ''' + builds the layouts image list. + ''' + + def buildStepX(self): + self.ilLayouts = ImageList() + self.ilLayouts.pos = Size (97, 38) + self.ilLayouts.imageSize = Size (34, 30) + self.ilLayouts.cols = 5 + self.ilLayouts.rows = 3 + self.ilLayouts.step = 3 + self.ilLayouts.showButtons = False + self.ilLayouts.renderer = self.LayoutRenderer() + self.ilLayouts.scaleImages = False + self.ilLayouts.tabIndex = 31 + self.ilLayouts.helpURL = HID3_IL_LAYOUTS_IMG1 + + + ''' + renders the images and titles of + the layouts + @author rpiterman + ''' + + class LayoutRenderer: + + def getImageUrls(self, listItem): + oResIds = None + if listItem != None: + oResIds = listItem.getImageUrls() + + return oResIds + + def render(self, listItem): + print "implementar" + #return listItem == None ? "" : (listItem).cp_Name diff --git a/wizards/com/sun/star/wizards/web/WebWizardDialogResources.py b/wizards/com/sun/star/wizards/web/WebWizardDialogResources.py new file mode 100644 index 000000000000..f52f1517f183 --- /dev/null +++ b/wizards/com/sun/star/wizards/web/WebWizardDialogResources.py @@ -0,0 +1,298 @@ +import traceback +from common.Resource import Resource +from common.Configuration import Configuration +from common.Properties import Properties +from document.OfficeDocument import OfficeDocument + +class WebWizardDialogResources(Resource): + UNIT_NAME = "dbwizres" + MODULE_NAME = "dbw" + RID_WEBWIZARDDIALOG_START = 4000 + RID_COMMON_START = 500 + RID_DB_COMMON_START = 1000 + + def __init__(self, xmsf): + super(WebWizardDialogResources,self).__init__(xmsf, + WebWizardDialogResources.MODULE_NAME) + self.resbtnDocUp_value = str(8743) + self.resbtnDocDown_value = str(8744) + + #Delete the String, uncomment the getResText method + self.resWebWizardDialog_title = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 1) + self.reslblIntroduction_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 2) + self.resbtnDelSession_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 4) + self.reslbIntroTitle_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 5) + self.reslblContentTitle_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 6) + self.reslnDocsInfo_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 8) + self.reslblDocTitle_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 9) + self.reslblDocInfo_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 10) + self.reslblDocAuthor_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 11) + self.reslblDocExportFormat_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 12) + self.reslblTitleGeneralPage_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 13) + self.reslblSiteTitle_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 14) + self.reslblSiteDesc_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 16) + self.reslblSiteCreated_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 18) + self.reslblEmail_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 20) + self.reslblCopyright_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 21) + self.reslblSiteUpdated_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 22) + self.resbtnPreview_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 24) + self.reslblTitlePublish_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 25) + self.reslblCreateSite_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 26) + self.reschkLocalDir_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 27) + self.resbtnLocalDir_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 28) + self.reschkFTP_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 29) + + self.resbtnFTP_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 31) + self.reschkZip_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 32) + self.resbtnZip_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 33) + self.reschkSaveSettings_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 34) + self.reslblSaveSettings_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 35) + self.reslblLoadSettings_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 36) + self.reslblSiteContent_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 37) + self.resbtnAddDoc_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 38) + self.resbtnRemoveDoc_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 39) + self.reslblLayoutTitle_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 40) + self.reslblStyleTitle_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 41) + self.reslblStyle_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 42) + + self.reslblLayouts_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 48) + + self.reschbDocDesc_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 50) + self.reschbDocAuthor_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 51) + self.reschkDocCreated_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 52) + self.reschkDocChanged_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 53) + self.reschkDocFilename_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 54) + self.reschkDocFormat_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 55) + self.reschkDocFormatIcon_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 56) + self.reschkDocPages_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 57) + self.reschkDocSize_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 58) + self.resFixedLine1_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 59) + self.reslblLayout2Title_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 60) + self.reslblDisplay_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 61) + self.reslblOptimizeFor_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 62) + self.resoptOptimize640x480_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 64) + self.resoptOptimize800x600_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 65) + self.resoptOptimize1024x768_value = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 66) + + self.resStatusDialogTitle = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 70) + self.resCounter = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 71) + self.resPublishDir = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 72) + self.resFTPTargetExistsAsfile = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 73) + self.resLocalTargetExistsAsfile = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 74) + self.resZipTargetExists = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 75) + self.resFTPTargetNotEmpty = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 76) + self.resLocalTragetNotEmpty = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 77) + self.resSessionExists = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 78) + self.resTaskExportDocs = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 79) + self.resTaskExportPrepare = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 80) + self.resTaskGenerateCopy = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 81) + self.resTaskGeneratePrepare = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 82) + self.resTaskGenerateXsl = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 83) + self.resTaskPrepare = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 84) + self.resTaskPublishPrepare = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 86) + self.resTaskPublishLocal = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 87) + self.resTaskPublishFTP = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 88) + self.resTaskPublishZip = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 89) + self.resTaskFinish = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 90) + + self.resImages = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 94) + self.resAllFiles = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 95) + self.resZipFiles = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 96) + self.resBackgroundsDialog = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 98) + self.resBackgroundsDialogCaption = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 99) + self.resIconsDialog = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 100) + self.resIconsDialogCaption = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 101) + self.resOther = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 102) + self.resDeselect = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 103) + self.resFinishedSuccess = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 104) + self.resFinishedNoSuccess = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 105) + self.resErrTOC = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 106) + self.resErrTOCMedia = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 107) + self.resErrDocInfo = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 108) + self.resErrDocExport = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 109) + self.resErrMkDir = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 110) + self.resErrSecurity = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 111) + self.resErrExportIO = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 112) + self.resErrPublishMedia = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 113) + self.resErrPublish = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 114) + self.resErrUnknown = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 115) + self.resErrDocValidate = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 116) + self.resErrIsDirectory = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 117) + self.resLoadingSession = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 118) + self.resErrUnexpected = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 119) + self.resValidatingDocuments = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 120) + self.resDefaultArchiveFilename = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 121) + self.resStep1 = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 122) + self.resStep2 = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 123) + self.resStep3 = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 124) + self.resStep4 = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 125) + self.resStep5 = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 126) + self.resStep6 = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 127) + self.resStep7 = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 128) + self.resDelSessionConfirm = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 130) + self.resPages = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 131) + self.resSlides = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 132) + self.resCreatedTemplate = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 133) + self.resUpdatedTemplate = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 134) + self.resSessionName = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 135) + self.reslblBackground = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 136) + self.reslblIconset = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 137) + self.reslblIconSetInfo = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 138) + self.reslblMetaData = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 139) + self.resBtnChooseBackground = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 140) + self.resBtnChooseIconset = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 141) + self.resSessionNameNone = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 142) + self.reslblFTPDisabled = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 143) + self.resBackgroundNone = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 144) + self.resIconsetNone = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 145) + self.resFTPTargetCouldNotCreate = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 146) + self.resFTPTargetCreate = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 147) + self.resZipTargetIsDir = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 148) + self.resLocalTargetCouldNotCreate = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 149) + self.resLocalTargetCreate = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 150) + self.resSizeTemplate = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 151) + self.resSpecifyNewFileLocation = self.getResText( + WebWizardDialogResources.RID_WEBWIZARDDIALOG_START + 152) + self.resClose = self.getResText( + WebWizardDialogResources.RID_COMMON_START + 17) + self.resCancel = self.getResText( + WebWizardDialogResources.RID_COMMON_START + 11) + self.resOK = self.getResText( + WebWizardDialogResources.RID_COMMON_START + 18) + self.resHelp = self.getResText( + WebWizardDialogResources.RID_COMMON_START + 15) + try: + self.prodName = Configuration.getProductName(xmsf) + self.resGifFiles = Properties.getPropertyValue( + OfficeDocument.getTypeMediaDescriptor( + xmsf, "gif_Graphics_Interchange"), "UIName") + except Exception, ex: + traceback.print_exc() diff --git a/wizards/com/sun/star/wizards/web/__init__.py b/wizards/com/sun/star/wizards/web/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/wizards/com/sun/star/wizards/web/__init__.py |