[Libreoffice-commits] .: Branch 'feature/gsoc2011_wizards' - wizards/com

Xisco Fauli xfauli at kemper.freedesktop.org
Mon Aug 8 10:35:06 PDT 2011


 wizards/com/sun/star/wizards/agenda/CGAgenda.py              |    2 
 wizards/com/sun/star/wizards/common/ConfigGroup.py           |    4 
 wizards/com/sun/star/wizards/common/ConfigNode.py            |    4 
 wizards/com/sun/star/wizards/common/ConfigSet.py             |   86 -
 wizards/com/sun/star/wizards/common/FileAccess.py            |  147 -
 wizards/com/sun/star/wizards/common/Helper.py                |    2 
 wizards/com/sun/star/wizards/common/Properties.py            |   11 
 wizards/com/sun/star/wizards/document/OfficeDocument.py      |    8 
 wizards/com/sun/star/wizards/ui/DocumentPreview.py           |   85 +
 wizards/com/sun/star/wizards/ui/PeerConfig.py                |   26 
 wizards/com/sun/star/wizards/ui/UnoDialog.py                 |   29 
 wizards/com/sun/star/wizards/ui/WizardDialog.py              |    5 
 wizards/com/sun/star/wizards/ui/event/DataAware.py           |    5 
 wizards/com/sun/star/wizards/ui/event/ListModelBinder.py     |   75 
 wizards/com/sun/star/wizards/ui/event/UnoDataAware.py        |    7 
 wizards/com/sun/star/wizards/web/StylePreview.py             |   76 
 wizards/com/sun/star/wizards/web/WWD_Events.py               |  854 +++++++++++
 wizards/com/sun/star/wizards/web/WWD_General.py              |  267 +++
 wizards/com/sun/star/wizards/web/WWD_Startup.py              |  623 ++++++++
 wizards/com/sun/star/wizards/web/WWHID.py                    |  140 +
 wizards/com/sun/star/wizards/web/WebWizardConst.py           |   39 
 wizards/com/sun/star/wizards/web/WebWizardDialog.py          |  713 +++++++++
 wizards/com/sun/star/wizards/web/WebWizardDialogResources.py |  298 +++
 wizards/com/sun/star/wizards/web/data/CGArgument.py          |    4 
 wizards/com/sun/star/wizards/web/data/CGContent.py           |   21 
 wizards/com/sun/star/wizards/web/data/CGDesign.py            |   38 
 wizards/com/sun/star/wizards/web/data/CGDocument.py          |  260 +++
 wizards/com/sun/star/wizards/web/data/CGExporter.py          |   23 
 wizards/com/sun/star/wizards/web/data/CGFilter.py            |    6 
 wizards/com/sun/star/wizards/web/data/CGGeneralInfo.py       |   42 
 wizards/com/sun/star/wizards/web/data/CGIconSet.py           |    7 
 wizards/com/sun/star/wizards/web/data/CGImage.py             |    4 
 wizards/com/sun/star/wizards/web/data/CGLayout.py            |   34 
 wizards/com/sun/star/wizards/web/data/CGPublish.py           |   35 
 wizards/com/sun/star/wizards/web/data/CGSession.py           |   49 
 wizards/com/sun/star/wizards/web/data/CGSessionName.py       |    5 
 wizards/com/sun/star/wizards/web/data/CGSettings.py          |  129 +
 wizards/com/sun/star/wizards/web/data/CGStyle.py             |   16 
 wizards/com/sun/star/wizards/web/data/TypeDetection.py       |   37 
 39 files changed, 4021 insertions(+), 195 deletions(-)

New commits:
commit a5ba6e77d78a8a81a7b843a088b4a3400e19a38b
Author: Xisco Fauli <anistenis at gmail.com>
Date:   Mon Aug 8 19:34:04 2011 +0200

    first attempt to create the web wizard

diff --git a/wizards/com/sun/star/wizards/agenda/CGAgenda.py b/wizards/com/sun/star/wizards/agenda/CGAgenda.py
index 2e699d9..112ef04 100644
--- a/wizards/com/sun/star/wizards/agenda/CGAgenda.py
+++ b/wizards/com/sun/star/wizards/agenda/CGAgenda.py
@@ -1,4 +1,4 @@
-from common.ConfigGroup import *
+from common.ConfigGroup import ConfigGroup
 from common.ConfigSet import ConfigSet
 from CGTopic import CGTopic
 
diff --git a/wizards/com/sun/star/wizards/common/ConfigGroup.py b/wizards/com/sun/star/wizards/common/ConfigGroup.py
index ca1b60a..d7a24ad 100644
--- a/wizards/com/sun/star/wizards/common/ConfigGroup.py
+++ b/wizards/com/sun/star/wizards/common/ConfigGroup.py
@@ -5,8 +5,6 @@ import inspect
 
 class ConfigGroup(ConfigNode):
 
-    root = None
-
     def writeConfiguration(self, configurationView, param):
         for name,data in inspect.getmembers(self):
             if name.startswith(param):
@@ -16,7 +14,6 @@ class ConfigGroup(ConfigNode):
         propertyName = field[len(prefix):]
         child = getattr(self, field)
         if isinstance(child, ConfigNode):
-            child.setRoot(self.root)
             child.writeConfiguration(configView.getByName(propertyName),
                 prefix)
         else:
@@ -31,7 +28,6 @@ class ConfigGroup(ConfigNode):
         propertyName = field[len(prefix):]
         child = getattr(self, field)
         if isinstance(child, ConfigNode):
-            child.setRoot(self.root)
             child.readConfiguration(configView.getByName(propertyName),
                 prefix)
         else:
diff --git a/wizards/com/sun/star/wizards/common/ConfigNode.py b/wizards/com/sun/star/wizards/common/ConfigNode.py
index d97ac1b..0dc38c0 100644
--- a/wizards/com/sun/star/wizards/common/ConfigNode.py
+++ b/wizards/com/sun/star/wizards/common/ConfigNode.py
@@ -9,7 +9,3 @@ class ConfigNode(object):
     @abstractmethod
     def writeConfiguration(self, configurationView, param):
         pass
-
-    @abstractmethod
-    def setRoot(self, root):
-        pass
diff --git a/wizards/com/sun/star/wizards/common/ConfigSet.py b/wizards/com/sun/star/wizards/common/ConfigSet.py
index ca3a2da..7851fea 100644
--- a/wizards/com/sun/star/wizards/common/ConfigSet.py
+++ b/wizards/com/sun/star/wizards/common/ConfigSet.py
@@ -24,17 +24,73 @@ class ConfigSet(ConfigNode):
             i = name
             self.childrenList.insert(i, o)
         else:
-            i = o.cp_Index
-            oldSize = self.getSize()
-            if oldSize <= i:
-                newSize = i - oldSize
-                self.childrenList += [None] * newSize
-                self.noNulls = True
-            else:
-                self.noNulls = False
-            self.childrenList.insert(i, o);
-            if oldSize > i:
-                oldSize = i
+            try:
+                i = o.cp_Index
+                oldSize = self.getSize()
+                if oldSize <= i:
+                    newSize = i - oldSize
+                    self.childrenList += [None] * newSize
+                    self.noNulls = True
+                else:
+                    self.noNulls = False
+                self.childrenList.insert(i, o);
+                if oldSize > i:
+                    oldSize = i
+            except Exception:
+                self.childrenList.append(o)
+
+    def writeConfiguration(self, configView, param):
+        names = self.childrenMap.keys()
+        if isinstance(self.childClass, ConfigNode):
+            #first I remove all the children from the configuration.
+            children = configView.ElementNames
+            if children:
+                for i in children:
+                    try:
+                        Configuration.removeNode(configView, i)
+                    except Exception:
+                        traceback.print_exc()
+
+                # and add them new.
+            for i in names:
+                try:
+                    child = self.getElement(i)
+                    childView = configView.getByName(i)
+                    child.writeConfiguration(childView, param)
+                except Exception:
+                    traceback.print_exc()
+        else:
+            raise AttributeError (
+            "Unable to write primitive sets to configuration (not implemented)")
+
+    def readConfiguration(self, configurationView, param):
+        names = configurationView.ElementNames
+        if isinstance(self.childClass, ConfigNode):
+            if names:
+                for i in names:
+                    try:
+                        child = type(self.childClass)()
+                        child.readConfiguration(
+                            configurationView.getByName(i), param)
+                        self.add(i, child)
+                    except Exception, ex:
+                         traceback.print_exc()
+            #remove any nulls from the list
+            if self.noNulls:
+                i = 0
+                while i < len(self.childrenList):
+                    if self.childrenList[i] is None:
+                        del self.childrenList[i]
+                        i -= 1
+                    i += 1
+
+        else:
+            for i in names:
+                try:
+                    child = configurationView.getByName(i)
+                    self.add(i, child)
+                except Exception, ex:
+                    traceback.print_exc()
 
     def remove(self, obj):
         key = getKey(obj)
@@ -62,9 +118,6 @@ class ConfigSet(ConfigNode):
             i += 1
         return parent
 
-    def items(self):
-        return self.childrenList.toArray()
-
     def getKey(self, object):
         i = self.childrenMap.entrySet().iterator()
         while i.hasNext():
@@ -86,9 +139,6 @@ class ConfigSet(ConfigNode):
         else:
             return getKey(getElementAt(c - 1))
 
-    def setRoot(self, newRoot):
-        self.root = newRoot
-
     def getElementAt(self, i):
         return self.childrenList[i]
 
@@ -147,4 +197,4 @@ class ConfigSet(ConfigNode):
             i += 1
 
     def sort(self, comparator):
-        Collections.sort(self.childrenList, comparator)
+        self.childrenList.sort(comparator)
diff --git a/wizards/com/sun/star/wizards/common/FileAccess.py b/wizards/com/sun/star/wizards/common/FileAccess.py
index 1f6f741..5c288a7 100644
--- a/wizards/com/sun/star/wizards/common/FileAccess.py
+++ b/wizards/com/sun/star/wizards/common/FileAccess.py
@@ -287,88 +287,11 @@ class FileAccess(object):
                     return True
 
             return False
-        except CommandAbortedException, exception:
-            sMsgNoDir = JavaTools.replaceSubString(sNoDirCreation, Path, "%1")
-            SystemDialog.showMessageBox(xMSF, "ErrorBox", OK, sMsgNoDir)
-            return False
-        except com.sun.star.uno.Exception, Exception:
+        except Exception:
             sMsgNoDir = JavaTools.replaceSubString(sNoDirCreation, Path, "%1")
             SystemDialog.showMessageBox(xMSF, "ErrorBox", OK, sMsgNoDir)
             return False
 
-    '''
-    checks if the root of a path exists. if the parameter
-    xWindowPeer is not null then also the directory is
-    created when it does not exists and the user
-    '''
-
-    @classmethod
-    def PathisValid(self, xMSF, Path, sMsgFilePathInvalid,
-        baskbeforeOverwrite):
-        try:
-            SubDirPath = ""
-            bSubDirexists = True
-            NewPath = Path
-            xInterface = xMSF.createInstance(
-                "com.sun.star.ucb.SimpleFileAccess")
-            if baskbeforeOverwrite:
-                if xInterface.exists(Path):
-                    oResource = Resource.Resource_unknown(xMSF,
-                        "ImportWizard", "imp")
-                    sFileexists = oResource.getResText(1053)
-                    NewString = JavaTools.convertfromURLNotation(Path)
-                    sFileexists = JavaTools.replaceSubString(sFileexists,
-                        NewString, "<1>")
-                    sFileexists = JavaTools.replaceSubString(sFileexists,
-                        str(13), "<CR>")
-                    iLeave = SystemDialog.showMessageBox(xMSF, "QueryBox",
-                        YES_NO, sFileexists)
-                    if iLeave == 3:
-                        return False
-
-            DirArray = JavaTools.ArrayoutofString(Path, "/")
-            MaxIndex = DirArray.length - 1
-            if MaxIndex > 0:
-                i = MaxIndex
-                while i >= 0:
-                    SubDir = DirArray[i]
-                    SubLen = SubDir.length()
-                    NewLen = NewPath.length()
-                    RestLen = NewLen - SubLen
-                    if RestLen > 0:
-                        NewPath = NewPath.substring(0, NewLen - SubLen - 1)
-                        if i == MaxIndex:
-                            SubDirPath = NewPath
-
-                        bexists = xSimpleFileAccess.exists(NewPath)
-                        if bexists:
-                            LowerCasePath = NewPath.toLowerCase()
-                            bexists = (((LowerCasePath.equals("file:#/")) or
-                                (LowerCasePath.equals("file:#")) or
-                                (LowerCasePath.equals("file:/")) or
-                                (LowerCasePath.equals("file:"))) == False)
-
-                        if bexists:
-                            if bSubDirexists == False:
-                                bSubDiriscreated = createSubDirectory(xMSF,
-                                    xSimpleFileAccess, SubDirPath)
-                                return bSubDiriscreated
-
-                            return True
-                        else:
-                            bSubDirexists = False
-
-                    i -= 1
-
-            SystemDialog.showMessageBox(xMSF, "ErrorBox", OK,
-                sMsgFilePathInvalid)
-            return False
-        except com.sun.star.uno.Exception, exception:
-            traceback.print_exc()
-            SystemDialog.showMessageBox(xMSF, "ErrorBox", OK,
-                sMsgFilePathInvalid)
-            return False
-
     @classmethod
     def getFolderTitles(self, xMSF, FilterName, FolderName):
         LocLayoutFiles = [[2],[]]
@@ -453,7 +376,7 @@ class FileAccess(object):
                     sFoundFile = sPath
 
                 i += 1
-        except com.sun.star.uno.Exception, e:
+        except Exception, e:
             pass
 
         return sFoundFile
@@ -482,11 +405,7 @@ class FileAccess(object):
 
     def getURL(self, path, childPath=None):
         try:
-            if childPath is not None:
-                path = self.filenameConverter.getSystemPathFromFileURL(path)
-                f = open(path,childPath, 'w')
-            else:
-                f = open(path, 'w')
+            f = open(path, 'w')
 
             r = self.filenameConverter.getFileURLFromSystemPath(path,
                  osPath.abspath(path))
@@ -530,9 +449,7 @@ class FileAccess(object):
         try:
             self.fileAccess.createFolder(s)
             return True
-        except CommandAbortedException, cax:
-            traceback.print_exc()
-        except com.sun.star.uno.Exception, ex:
+        except Exception:
             traceback.print_exc()
 
         return False
@@ -548,12 +465,10 @@ class FileAccess(object):
     def exists(self, filename, defe):
         try:
             return self.fileAccess.exists(filename)
-        except CommandAbortedException, cax:
-            pass
         except Exception:
-            pass
+            traceback.print_exc()
 
-        return defe
+        #return defe
 
     '''
     @author rpiterman
@@ -564,10 +479,8 @@ class FileAccess(object):
     def isDirectory(self, filename):
         try:
             return self.fileAccess.isFolder(filename)
-        except CommandAbortedException, cax:
-            pass
-        except com.sun.star.uno.Exception, ex:
-            pass
+        except Exception:
+            traceback.print_exc()
 
         return False
 
@@ -582,10 +495,8 @@ class FileAccess(object):
     def listFiles(self, dir, includeFolders):
         try:
             return self.fileAccess.getFolderContents(dir, includeFolders)
-        except CommandAbortedException, cax:
-            pass
-        except com.sun.star.uno.Exception, ex:
-            pass
+        except Exception:
+            traceback.print_exc()
 
         return range(0)
 
@@ -599,9 +510,7 @@ class FileAccess(object):
         try:
             self.fileAccess.kill(file)
             return True
-        except CommandAbortedException, cax:
-            traceback.print_exc()
-        except com.sun.star.uno.Exception, ex:
+        except Exception:
             traceback.print_exc()
 
         return False
@@ -647,20 +556,16 @@ class FileAccess(object):
         try:
             self.fileAccess.copy(source, target)
             return True
-        except CommandAbortedException, cax:
-            pass
-        except com.sun.star.uno.Exception, ex:
-            pass
+        except Exception:
+            traceback.print_exc()
 
         return False
 
     def getLastModified(self, url):
         try:
             return self.fileAccess.getDateTimeModified(url)
-        except CommandAbortedException, cax:
-            pass
-        except com.sun.star.uno.Exception, ex:
-            pass
+        except Exception:
+            traceback.print_exc()
 
         return None
 
@@ -677,32 +582,32 @@ class FileAccess(object):
         return url[:url.rfind("/")]
 
     def createNewDir(self, parentDir, name):
-        s = getNewFile(parentDir, name, "")
-        if mkdir(s):
+        s = self.getNewFile(parentDir, name, "")
+        if self.mkdir(s):
             return s
         else:
             return None
 
     def getNewFile(self, parentDir, name, extension):
         i = 0
-        tmp_do_var2 = True
-        while tmp_do_var2:
-            filename = filename(name, extension, (i + 1))
-            u = getURL(parentDir, filename)
-            url = u
-            tmp_do_var2 = exists(url, True)
+        temp = True
+        while temp:
+            filename = self.filename(name, extension, i)
+            url = parentDir + "/" + filename
+            temp = self.exists(url, True)
+            i += 1
         return url
 
     @classmethod
     def filename(self, name, ext, i):
         stringI = ""
         stringExt = ""
-        if i is not 0:
+        if i != 0:
             stringI = str(i)
-        if ext is not "":
+        if ext !=  "":
             stringExt = "." + ext
 
-        return name + stringI + StringExt
+        return name + stringI + stringExt
 
     def getSize(self, url):
         try:
diff --git a/wizards/com/sun/star/wizards/common/Helper.py b/wizards/com/sun/star/wizards/common/Helper.py
index fa0793a..a31a637 100644
--- a/wizards/com/sun/star/wizards/common/Helper.py
+++ b/wizards/com/sun/star/wizards/common/Helper.py
@@ -88,7 +88,7 @@ class Helper(object):
                     self.setUnoPropertyValue(
                         xMultiPSetLst, PropertyNames[index], workwith)
 
-        except Exception, e:
+        except Exception:
             traceback.print_exc()
 
     '''
diff --git a/wizards/com/sun/star/wizards/common/Properties.py b/wizards/com/sun/star/wizards/common/Properties.py
index fc0abe9..4a906ed 100644
--- a/wizards/com/sun/star/wizards/common/Properties.py
+++ b/wizards/com/sun/star/wizards/common/Properties.py
@@ -27,13 +27,10 @@ class Properties(dict):
         return False
 
     @classmethod
-    def getProperties(self, _map=None):
-        if _map is None:
-            _map = self
-        pv = PropertyValue[_map.size()]
-        it = _map.keySet().iterator()
-        while i in pv:
-            i = createProperty(it.next(), _map)
+    def getProperties(self, _map):
+        pv = []
+        for k,v in _map.items():
+            pv.append(self.createProperty(k, v))
         return pv
 
     @classmethod
diff --git a/wizards/com/sun/star/wizards/document/OfficeDocument.py b/wizards/com/sun/star/wizards/document/OfficeDocument.py
index f0a07fd..887ff4a 100644
--- a/wizards/com/sun/star/wizards/document/OfficeDocument.py
+++ b/wizards/com/sun/star/wizards/document/OfficeDocument.py
@@ -66,6 +66,7 @@ class OfficeDocument(object):
     (implements XComponent) object ( XTextDocument, or XSpreadsheedDocument )
     '''
 
+    @classmethod
     def createNewDocument(self, frame, sDocumentType, preview, readonly):
         loadValues = range(2)
         loadValues[0] = uno.createUnoStruct(
@@ -83,13 +84,13 @@ class OfficeDocument(object):
             loadValues[1].Value = True
         else:
             loadValues[1].Value = False
-
         sURL = "private:factory/" + sDocumentType
+        xComponent = None
         try:
             xComponent = frame.loadComponentFromURL(
-                sURL, "_self", 0, loadValues)
+                sURL, "_self", 0, tuple(loadValues))
 
-        except Exception, exception:
+        except Exception:
             traceback.print_exc()
 
         return xComponent
@@ -255,6 +256,7 @@ class OfficeDocument(object):
         else:
             return typeDetect.getByName(type)
 
+    @classmethod
     def getTypeMediaDescriptor(self, xmsf, type):
         typeDetect = xmsf.createInstance(
             "com.sun.star.document.TypeDetection")
diff --git a/wizards/com/sun/star/wizards/ui/DocumentPreview.py b/wizards/com/sun/star/wizards/ui/DocumentPreview.py
new file mode 100644
index 0000000..b3842b8
--- /dev/null
+++ b/wizards/com/sun/star/wizards/ui/DocumentPreview.py
@@ -0,0 +1,85 @@
+import traceback
+from common.Properties import Properties
+
+from com.sun.star.awt import WindowDescriptor
+from com.sun.star.awt import Rectangle
+from com.sun.star.awt.WindowClass import SIMPLE
+from com.sun.star.awt.VclWindowPeerAttribute import CLIPCHILDREN
+from com.sun.star.awt.WindowAttribute import SHOW
+
+'''
+ at author rpiterman
+To change the template for this generated type comment go to
+Window>Preferences>Java>Code Generation>Code and Comments
+'''
+
+class DocumentPreview(object):
+    PREVIEW_MODE = 1
+
+    '''
+    create new frame with window inside
+    load a component as preview into this frame
+    '''
+
+    def __init__(self, xmsf, control):
+        self.xControl = control
+        self.createPreviewFrame(xmsf, self.xControl)
+
+    def setDocument(self, url_, propNames, propValues=None):
+        if propValues is None:
+            if propNames == DocumentPreview.PREVIEW_MODE:
+                self.setDocument(url_, ("Preview", "ReadOnly"), (True, True))
+            else:
+                self.loadArgs = propNames
+                self.xFrame.activate()
+                self.xComponent = self.xFrame.loadComponentFromURL(url_, "_self", 0, tuple(self.loadArgs))
+                return self.xComponent
+        else:
+            self.url = url_
+            ps = Properties()
+            for index,item in enumerate(propNames):
+                ps[item] = propValues[index]
+            return self.setDocument(self.url, ps.getProperties(ps))
+
+    def reload(self, xmsf):
+        self.closeFrame()
+        self.createPreviewFrame(xmsf, self.xControl)
+        self.setDocument(self.url, self.loadArgs)
+
+    def closeFrame(self):
+        if self.xFrame is not None:
+            self.xFrame.close(False)
+
+    '''
+    create a new frame with a new container window inside,
+    which isnt part of the global frame tree.
+
+    Attention:
+    a) This frame wont be destroyed by the office. It must be closed by you!
+       Do so - please call XCloseable::close().
+    b) The container window is part of the frame. Dont hold it alive - nor try to kill it.
+       It will be destroyed inside close().
+    '''
+
+    def createPreviewFrame(self, xmsf, xControl):
+        controlPeer = xControl.Peer
+        r = xControl.PosSize
+        toolkit = xmsf.createInstance("com.sun.star.awt.Toolkit")
+        aDescriptor = WindowDescriptor()
+        aDescriptor.Type = SIMPLE
+        aDescriptor.WindowServiceName = "window"
+        aDescriptor.ParentIndex = -1
+        aDescriptor.Parent = controlPeer
+        #xWindowPeer; #argument !
+        aDescriptor.Bounds = Rectangle(0, 0, r.Width, r.Height)
+        aDescriptor.WindowAttributes = CLIPCHILDREN | SHOW
+        self.xWindow = toolkit.createWindow(aDescriptor)
+        self.xFrame = xmsf.createInstance("com.sun.star.frame.Frame")
+        self.xFrame.initialize(self.xWindow)
+        self.xWindow.setVisible(True)
+
+    def dispose(self):
+        try:
+            self.closeFrame()
+        except Exception:
+            traceback.print_exc()
diff --git a/wizards/com/sun/star/wizards/ui/PeerConfig.py b/wizards/com/sun/star/wizards/ui/PeerConfig.py
index 9026deb..b43d8bd 100644
--- a/wizards/com/sun/star/wizards/ui/PeerConfig.py
+++ b/wizards/com/sun/star/wizards/ui/PeerConfig.py
@@ -13,20 +13,36 @@ class PeerConfig(object):
         self.oUnoDialog.xUnoDialog.addWindowListener(
             WindowListenerProcAdapter(self.windowShown))
         self.m_aPeerTasks = []
+        self.aImageUrlTasks = []
 
     class PeerTask(object):
 
-        def __init__(self, _xControl,propNames_,propValues_):
-            self.propnames = propNames_
-            self.propvalues = propValues_
+        def __init__(self, _xControl, _propNames, _propValues):
+            self.propnames = _propNames
+            self.propvalues = _propValues
             self.xControl = _xControl
 
+    class ImageUrlTask(object):
+
+        def __init__(self, _oModel, _oResource, _oHCResource):
+            self.oModel = _oModel
+            self.oResource = _oResource
+            self.oHCResource = _oHCResource
+
     def windowShown(self):
         try:
             for i in self.m_aPeerTasks:
                 xVclWindowPeer = i.xControl.Peer
                 xVclWindowPeer.setProperty(i.propnames, i.propvalues)
 
+            for i in self.aImageUrlTasks:
+                if isinstance(aImageUrlTask.oResource, int):
+                    sImageUrl = oUnoDialog.getWizardImageUrl(aImageUrlTask.oResource, aImageUrlTask.oHCResource)
+                elif isinstance(aImageUrlTask.oResource, str):
+                    sImageUrl = oUnoDialog.getImageUrl(aImageUrlTask.oResource, aImageUrlTask.oHCResource)
+                if sImageUrl != "":
+                    Helper.setUnoPropertyValue(aImageUrlTask.oModel, PropertyNames.PROPERTY_IMAGEURL, sImageUrl)
+
         except Exception:
             traceback.print_exc()
 
@@ -40,3 +56,7 @@ class PeerConfig(object):
     def setPeerProperties(self, _xControl, propnames, propvalues):
         oPeerTask = self.PeerTask(_xControl, propnames, propvalues)
         self.m_aPeerTasks.append(oPeerTask)
+
+    def setImageUrl(self, _ocontrolmodel, _oResource,  _oHCResource):
+        oImageUrlTask = self.ImageUrlTask(_ocontrolmodel, _oResource, _oHCResource)
+        self.aImageUrlTasks.append(oImageUrlTask)
diff --git a/wizards/com/sun/star/wizards/ui/UnoDialog.py b/wizards/com/sun/star/wizards/ui/UnoDialog.py
index 8568d88..514978a 100644
--- a/wizards/com/sun/star/wizards/ui/UnoDialog.py
+++ b/wizards/com/sun/star/wizards/ui/UnoDialog.py
@@ -128,25 +128,6 @@ class UnoDialog(object):
             xListBox.selectItemPos(iSelIndex, True)
 
     '''
-    The problem with setting the visibility of controls
-    is that changing the current step of a dialog will automatically
-    make all controls visible. The PropertyNames.PROPERTY_STEP property
-    always wins against the property "visible". Therfor a control meant
-    to be invisible is placed on a step far far away.
-    @param the name of the control
-    @param iStep  change the step if you want to make the control invisible
-    '''
-
-    def setControlVisible(self, controlname, iStep):
-        try:
-            iCurStep = int(getControlProperty(
-                controlname, PropertyNames.PROPERTY_STEP))
-            setControlProperty(
-                controlname, PropertyNames.PROPERTY_STEP, iStep)
-        except com.sun.star.uno.Exception, exception:
-            traceback.print_exc()
-
-    '''
     The problem with setting the visibility of controls is that
     changing the current step of a dialog will automatically make
     all controls visible. The PropertyNames.PROPERTY_STEP property
@@ -297,11 +278,6 @@ class UnoDialog(object):
 
         return self.executeDialog( Rectangle (0, 0, 640, 400))
 
-    def setAutoMnemonic(self, ControlName, bValue):
-        self.xUnoDialog = self.xUnoDialog.getControl(ControlName)
-        xVclWindowPedsfer = self.xUnoDialog.getPeer()
-        self.xContainerWindow.setProperty("AutoMnemonics", bValue)
-
     def modifyFontWeight(self, ControlName, FontWeight):
         oFontDesc = FontDescriptor.FontDescriptor()
         oFontDesc.Weight = FontWeight
@@ -339,11 +315,6 @@ class UnoDialog(object):
                 setControlProperty(ListBoxName, "SelectedItems", [SelPos])
                 xListBox.selectItemPos((short)(SelPos - 1), True)
 
-    def setPeerProperty(self, ControlName, PropertyName, PropertyValue):
-        xControl = self.xUnoDialog.getControl(ControlName)
-        xVclWindowPeer = self.xControl.getPeer()
-        self.xContainerWindow.setProperty(PropertyName, PropertyValue)
-
     @classmethod
     def setEnabled(self, control, enabled):
         Helper.setUnoPropertyValue(
diff --git a/wizards/com/sun/star/wizards/ui/WizardDialog.py b/wizards/com/sun/star/wizards/ui/WizardDialog.py
index d29366a..8d5907d 100644
--- a/wizards/com/sun/star/wizards/ui/WizardDialog.py
+++ b/wizards/com/sun/star/wizards/ui/WizardDialog.py
@@ -47,9 +47,6 @@ class WizardDialog(UnoDialog2):
             UIConsts.RID_DB_COMMON + 33)
         self.oRoadmap = None
 
-    def getResource(self):
-        return self.__oWizardResource
-
     def itemStateChanged(self, itemEvent):
         try:
             self.nNewStep = itemEvent.ItemId
@@ -445,7 +442,7 @@ class WizardDialog(UnoDialog2):
 
     def cancelWizard(self):
         #can be overwritten by extending class
-        xDialog.endExecute()
+        self.xUnoDialog.endExecute()
 
     def removeTerminateListener(self):
         if self.__bTerminateListenermustberemoved:
diff --git a/wizards/com/sun/star/wizards/ui/event/DataAware.py b/wizards/com/sun/star/wizards/ui/event/DataAware.py
index aca813a..d2e4046 100644
--- a/wizards/com/sun/star/wizards/ui/event/DataAware.py
+++ b/wizards/com/sun/star/wizards/ui/event/DataAware.py
@@ -32,6 +32,9 @@ class DataAware(object):
         self._dataObject = dataObject_
         self._field = field_    
 
+    def enableControls(self, value):
+        pass
+
     '''
     sets the given value to the UI control
     @param newValue the value to set to the ui control.
@@ -63,6 +66,7 @@ class DataAware(object):
             except Exception, ex:
                 traceback.print_exc()
                 #TODO tell user...
+        self.enableControls(data)
 
     '''
     updates the DataObject according to
@@ -78,5 +82,6 @@ class DataAware(object):
                     #Selected Element listbox
                     ui = ui[0]
                 setattr(self._dataObject, self._field, ui)
+            self.enableControls(ui)
         except Exception:
             traceback.print_exc()
diff --git a/wizards/com/sun/star/wizards/ui/event/ListModelBinder.py b/wizards/com/sun/star/wizards/ui/event/ListModelBinder.py
new file mode 100644
index 0000000..183bab0
--- /dev/null
+++ b/wizards/com/sun/star/wizards/ui/event/ListModelBinder.py
@@ -0,0 +1,75 @@
+from common.Helper import Helper
+
+class ListModelBinder(object):
+
+    def __init__(self, unoListBox, listModel_):
+        self.unoList = unoListBox
+        self.unoListModel = unoListBox.Model
+        #COMMENTED
+        #self.setListModel(listModel_)
+
+    def setListModel(self, newListModel):
+        if self.listModel is not None:
+            self.listModel.removeListDataListener(self)
+
+        self.listModel = newListModel
+        self.listModel.addListDataListener(this)
+
+    def contentsChanged(self, lde):
+        selected = getSelectedItems()
+        i = lde.getIndex0()
+        while i <= lde.getIndex1():
+            update(i)
+            i += 1
+        setSelectedItems(selected)
+
+    def update(self, i):
+        remove(i, i)
+        insert(i)
+
+    def remove(self, i1, i2):
+        self.unoList.removeItems(i1, i2 - i1 + 1)
+
+    def insert(self, i):
+        self.unoList.addItem(getItemString(i), i)
+
+    def getItemString(self, i):
+        return getItemString(self.listModel.getElementAt(i))
+
+    def getItemString(self, item):
+        return self.renderer.render(item)
+
+    def getSelectedItems(self):
+        return Helper.getUnoPropertyValue(self.unoListModel, "SelectedItems")
+
+    def setSelectedItems(self, selected):
+        Helper.setUnoPropertyValue(self.unoListModel, "SelectedItems", selected)
+
+    def intervalAdded(self, lde):
+        for i in xrange(lde.Index0, lde.Index1):
+            insert(i)
+
+    def intervalRemoved(self, lde):
+        remove(lde.Index0, lde.Index1)
+
+    @classmethod
+    def fillList(self, xlist, items, renderer):
+        Helper.setUnoPropertyValue(xlist.Model, "StringItemList", ())
+        for index,item in enumerate(items):
+            if item is not None:
+                if renderer is not None:
+                    aux = renderer.render(index)
+                else:
+                    aux = item.cp_Name
+                xlist.addItem(aux, index)
+
+    @classmethod
+    def fillComboBox(self, xComboBox, items, renderer):
+        Helper.setUnoPropertyValue(xComboBox.Model, "StringItemList", ())
+        for index,item in enumerate(items):
+            if item is not None:
+                if renderer is not None:
+                    aux = renderer.render(index)
+                else:
+                    aux = item.toString()
+                xComboBox.addItem(aux, index)
diff --git a/wizards/com/sun/star/wizards/ui/event/UnoDataAware.py b/wizards/com/sun/star/wizards/ui/event/UnoDataAware.py
index b7f0bb4..b0b9c07 100644
--- a/wizards/com/sun/star/wizards/ui/event/UnoDataAware.py
+++ b/wizards/com/sun/star/wizards/ui/event/UnoDataAware.py
@@ -14,6 +14,8 @@ For those controls, static convenience methods are offered, to simplify use.
 
 class UnoDataAware(DataAware):
 
+    disableObjects = []
+
     def __init__(self, dataObject, field, unoObject_, unoPropName_, isShort=False):
         super(UnoDataAware,self).__init__(dataObject, field)
         self.unoControl = unoObject_
@@ -21,6 +23,11 @@ class UnoDataAware(DataAware):
         self.unoPropName = unoPropName_
         self.isShort = isShort
 
+    def enableControls(self, value):
+        for i in self.disableObjects:
+            Helper.setUnoPropertyValue(
+                i.Model, PropertyNames.PROPERTY_ENABLED, value)
+
     def setToUI(self, value):
         if self.isShort:
             value = uno.Any("[]short", (value,))
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 0000000..1ad6f95
--- /dev/null
+++ b/wizards/com/sun/star/wizards/web/StylePreview.py
@@ -0,0 +1,76 @@
+from common.FileAccess import FileAccess
+import traceback
+
+'''
+ at 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 0000000..447a0b6
--- /dev/null
+++ b/wizards/com/sun/star/wizards/web/WWD_Events.py
@@ -0,0 +1,854 @@
+import traceback
+from common.Desktop import Desktop
+from WWD_Startup import WWD_Startup
+
+'''
+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):
+    EMPTY_SHORT_ARRAY = range(0)
+    EMPTY_STRING_ARRAY = range(0)
+
+    '''
+    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(lstLoadSettings.Model, "SelectedItems")
+            if s.length == 0 or s[0] == 0:
+                sessionToLoad = ""
+            else:
+                sessionToLoad = \
+                    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()
+            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.CGSession()
+            session.setRoot(settings)
+            session.readConfiguration(view, CONFIG_READ_PARAM)
+            task.setMax(session.cp_Content.cp_Documents.getSize() * 5 + 7)
+            task.advance(True)
+            if sessionToLoad.equals(""):
+                setSaveSessionName(session)
+
+            mount(session, task, False, sd.xControl)
+            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(
+            lstLoadSettings.Model, "SelectedItems")
+        if selected.length == 0:
+            return
+
+        if selected[0] == 0:
+            return
+
+        confirm = AbstractErrorHandler.showMessage(
+            self.xMSF, xControl.Peer, resources.resDelSessionConfirm,
+            ErrorHandler.ERROR_QUESTION_NO)
+        if confirm:
+            try:
+                name = settings.cp_SavedSessions.getKey(selected[0])
+                # first delete the session from the registry/configuration.
+                Configuration.removeNode(
+                    self.xMSF, CONFIG_PATH + "/SavedSessions", name)
+                # then delete settings.cp_SavedSessions
+                settings.cp_SavedSessions.remove(selected[0])
+                settings.savedSessions.remove(selected[0] - 1)
+                nextSelected = [0]
+                # We try to select the same item index again, if possible
+                if 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(
+                        lstLoadSettings.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 = getDoc(selectedDoc)
+        doc = getDoc(s)
+        if doc == None:
+            fillExportList(WWD_Events.EMPTY_STRING_ARRAY)
+            #I try to avoid refreshing the export list if
+            #the same type of document is chosen.
+        elif oldDoc == None or (not oldDoc.appType.equals(doc.appType)):
+            fillExportList(settings.getExporters(doc.appType))
+        else:
+
+            # do nothing
+            selectedDoc = s
+            mount(doc, docAware)
+            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):
+        files = getDocAddDialog().callOpenDialog(
+            True, settings.cp_DefaultSession.cp_InDirectory)
+        if files is None:
+            return
+
+        task = Task.Task_unknown("", "", files.length * 5)
+        '''
+        If more than a certain number
+        of documents have been added,
+        open the status dialog.
+        '''
+        if (files.length > MIN_ADD_FILES_FOR_DIALOG):
+            sd = getStatusDialog()
+            sd.setLabel(resources.resValidatingDocuments)
+            sd.execute(this, task, resources.prodName)
+            # new LoadDocs( sd.xControl, files, task )
+            oLoadDocs = LoadDocs.LoadDocs_unknown(self.xControl, files, task)
+            oLoadDocs.loadDocuments()
+            task.removeTaskListener(sd)
+        else:
+            '''
+            When adding a single document, do not use a
+            status dialog...
+            '''
+            oLoadDocs = LoadDocs.LoadDocs_unknown(self.xControl, files, task)
+            oLoadDocs.loadDocuments()
+
+    '''
+    The user clicked delete.
+    '''
+
+    def removeDocument(self):
+        if selectedDoc.length == 0:
+            return
+
+        settings.cp_DefaultSession.cp_Content.cp_Documents.remove(
+            selectedDoc[0])
+        # update the selected document
+        while selectedDoc[0] >= getDocsCount():
+            selectedDoc[0] -= 1
+            # if there are no documents...
+        if selectedDoc[0] == -1:
+            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 = settings.cp_DefaultSession.cp_Content.cp_Documents.getElementAt(
+            selectedDoc[0])
+        settings.cp_DefaultSession.cp_Content.cp_Documents.remove(
+            selectedDoc[0])
+        settings.cp_DefaultSession.cp_Content.cp_Documents.add(
+            selectedDoc[0] - 1, doc)
+        docListDA.updateUI()
+        disableDocUpDown()
+
+    '''
+    doc down
+    '''
+
+    def docDown(self):
+        doc = settings.cp_DefaultSession.cp_Content.cp_Documents.getElementAt(
+            selectedDoc[0])
+        settings.cp_DefaultSession.cp_Content.cp_Documents.remove(
+            selectedDoc[0])
+        settings.cp_DefaultSession.cp_Content.cp_Documents.add(
+            (selectedDoc[0] + 1), doc)
+        docListDA.updateUI()
+        disableDocUpDown()
+
+    '''
+    **************
+        STEP 5
+    **************
+    '''
+
+    '''
+    the user clicked the "backgrounds" button
+    '''
+
+    def chooseBackground(self):
+        try:
+            setEnabled(btnBackgrounds, False)
+            if self.bgDialog == None:
+                self.bgDialog = BackgroundsDialog(
+                    self.xMSF, settings.cp_BackgroundImages, resources)
+                self.bgDialog.createWindowPeer(xControl.Peer)
+
+            self.bgDialog.setSelected(
+                settings.cp_DefaultSession.cp_Design.cp_BackgroundImage)
+            i = self.bgDialog.executeDialog(WWD_Events.this)
+            if i == 1:
+                #ok
+                setBackground(self.bgDialog.getSelected())
+        except Exception, ex:
+            ex.printStackTrace()
+        finally:
+            setEnabled(btnBackgrounds, True)
+
+    '''
+    invoked when the BackgorundsDialog is "OKed".
+    '''
+
+    def setBackground(self, background):
+        if background == None:
+            background = ""
+
+        settings.cp_DefaultSession.cp_Design.cp_BackgroundImage = background
+        refreshStylePreview()
+
+    '''
+    is called when the user clicks "Icon sets" button.
+    '''
+
+    def chooseIconset(self):
+        try:
+            setEnabled(btnIconSets, False)
+            if self.iconsDialog == None:
+                self.iconsDialog = IconsDialog(
+                    self.xMSF, settings.cp_IconSets, resources)
+                self.iconsDialog.createWindowPeer(xControl.Peer)
+
+            self.iconsDialog.setIconset(
+                settings.cp_DefaultSession.cp_Design.cp_IconSet)
+            i = self.iconsDialog.executeDialog(WWD_Events.this)
+            if i == 1:
+                #ok
+                setIconset(self.iconsDialog.getIconset())
+        except Exception, ex:
+            ex.printStackTrace()
+        finally:
+            setEnabled(btnIconSets, True)
+
+    '''
+    invoked when the Iconsets Dialog is OKed.
+    '''
+
+    def setIconset(self, icon):
+        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", "",
+            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(
+            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, xControl.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, xControl.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, xControl.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, xControl.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, xControl.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, xControl.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, xControl.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, xControl.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, xControl.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, xControl.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 = 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, xControl.Peer,
+                            resources.resSessionExists.replace("${NAME}", name),
+                            ErrorHandler.ERROR_NORMAL_IGNORE):
+                        return False
+                        #remove the old session
+
+                Configuration.removeNode(conf, name)
+            except NoSuchElementException, nsex:
+                traceb
+
+            settings.cp_DefaultSession.cp_Index = 0;
+            node = Configuration.addConfigNode(conf, name)
+            settings.cp_DefaultSession.cp_Name = name;
+            settings.cp_DefaultSession.writeConfiguration(
+                node, CONFIG_READ_PARAM)
+            settings.cp_SavedSessions.reindexSet(conf, name, "Index")
+            Configuration.commit(conf)
+            # now I reload the sessions to actualize the list/combo
+            # boxes load/save sessions.
+            settings.cp_SavedSessions.clear()
+            confView = Configuration.getConfigurationRoot(
+                self.xMSF, CONFIG_PATH + "/SavedSessions", False)
+            settings.cp_SavedSessions.readConfiguration(
+                confView, CONFIG_READ_PARAM)
+            settings.cp_LastSavedSession = name;
+            self.currentSession = name
+            # now save the name of the last saved session...
+            settings.cp_LastSavedSession = name;
+            # TODO add the <none> session...
+            prepareSessionLists()
+            ListModelBinder.fillList(
+                lstLoadSettings, settings.cp_SavedSessions.items(), None)
+            ListModelBinder.fillComboBox(
+                cbSaveSettings, settings.savedSessions.items(), None)
+            selectSession()
+            self.currentSession = 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, xControl.Peer, message, ErrorHandler.ERROR_MESSAGE)
+            if self.exitOnCreate:
+                self.xDialog.endExecute()
+
+        else:
+            AbstractErrorHandler.showMessage(
+                self.xMSF, xControl.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:
+            settings.cp_LastSavedSession = ""
+
+        try:
+            conf = Configuration.getConfigurationRoot(xMSF, CONFIG_PATH, True)
+            Configuration.set(
+                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, xControl.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 self.bgDialog is not None:
+                self.bgDialog.xComponent.dispose()
+
+            if self.iconsDialog is not None:
+                self.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()
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 0000000..f5bb8e5
--- /dev/null
+++ b/wizards/com/sun/star/wizards/web/WWD_General.py
@@ -0,0 +1,267 @@
+from WebWizardDialog import *
+from common.SystemDialog import SystemDialog
+
+'''
+ at author rpiterman
+This class implements general methods, used by different sub-classes
+(either WWD_Sturtup, or WWD_Events) or both.
+'''
+
+class WWD_General(WebWizardDialog):
+
+    '''
+    @param xmsf
+    '''
+
+    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,
+            resources.resLoadingSession, False,
+            [resources.prodName, "", "", "", "", ""],
+            HelpIds.getHelpIdString(HID0_STATUS_DIALOG))
+        try:
+            statusDialog.createWindowPeer(xControl.Peer)
+        except Exception, e:
+            e.printStackTrace()
+
+        return statusDialog
+
+    '''
+     File Dialog methods
+    '''
+
+    def getDocAddDialog(self):
+        self.docAddDialog = SystemDialog.createOpenDialog(xMSF)
+        i = 0
+        while i < self.settings.cp_Filters.getSize():
+            f = (self.settings.cp_Filters.getElementAt(i))
+            self.docAddDialog.addFilter(
+                f.cp_Name.replace("%PRODNAME", resources.prodName),
+                f.cp_Filter, i == 0)
+            i += 1
+        return self.docAddDialog
+
+    def getZipDialog(self):
+        if self.zipDialog is None:
+            self.zipDialog = SystemDialog.createStoreDialog(xMSF)
+            self.zipDialog.addFilter(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, ex:
+                ex.printStackTrace()
+
+        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)
+
+    def getFileAccess(self):
+        if self.fileAccess is None:
+            try:
+                self.fileAccess = FileAccess(xMSF)
+            except Exception, ex:
+                ex.printStackTrace()
+
+        return self.fileAccess
+
+    '''
+    returns the document specified
+    by the given short array.
+    @param s
+    @return
+    '''
+
+    def getDoc(self, s):
+        if s.length == 0:
+            return None
+        elif self.settings.cp_DefaultSession.cp_Content.cp_Documents.getSize() <= s[0]:
+            return None
+        else:
+            return self.settings.cp_DefaultSession.cp_Content.cp_Documents.getElementAt(s[0])
+
+    '''
+    how many documents are in the list?
+    @return the number of documents in the docs list.
+    '''
+
+    def getDocsCount(self):
+        return self.settings.cp_DefaultSession.cp_Content.cp_Documents.getSize()
+
+    '''
+    fills the export listbox.
+    @param listContent
+    '''
+
+    def fillExportList(self, listContent):
+        ListModelBinder.fillList(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 self.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 self.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, 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 0000000..5709de9
--- /dev/null
+++ b/wizards/com/sun/star/wizards/web/WWD_Startup.py
@@ -0,0 +1,623 @@
+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
+
+'''
+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_Startup.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_Startup.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.
+
+ at author rpiterman
+'''
+
+class WWD_Startup(WWD_General):
+
+    settings = None
+
+    '''
+    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_Startup.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.selectedDoc = 0
+        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_Startup.settings.cp_DefaultSession)
+        self.ilLayouts.listModel = WWD_Startup.settings.cp_Layouts
+        self.ilLayouts.create(self)
+        #COMMENTED
+        #self.checkContent(WWD_Startup.settings.cp_DefaultSession.cp_Content, Task ("", "", 99999), self.xControl)
+        #saved sessions, styles, combobox save session.
+        # also set the chosen saved session...
+        self.fillLists()
+        self.makeDataAware()
+
+        self.checkPublish()
+
+        # fill the documents listbox.
+        #COMMENTED
+        #self.mount(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_Startup.settings.cp_SavedSessions.getSize()):
+            sessionName = \
+                WWD_Startup.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)
+
+    '''
+    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_Startup.settings.workPath)
+            self.stylePreview.refresh(
+                WWD_Startup.settings.cp_DefaultSession.getStyle(
+                    WWD_Startup.settings.cp_Styles),
+                WWD_Startup.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_Startup.settings from the registry.
+    '''
+
+    def loadSettings(self, document):
+        try:
+            # instanciate
+            WWD_Startup.settingsResources = \
+                [self.resources.resPages, self.resources.resSlides,
+                    self.resources.resCreatedTemplate,
+                    self.resources.resUpdatedTemplate,
+                    self.resources.resSizeTemplate]
+
+            WWD_Startup.settings = CGSettings(
+                self.xMSF, WWD_Startup.settingsResources, document)
+            # get configuration view
+            confRoot = Configuration.getConfigurationRoot(
+                self.xMSF, CONFIG_PATH, False)
+            # read
+            WWD_Startup.settings.readConfiguration(
+                confRoot, CONFIG_READ_PARAM)
+            configSet = WWD_Startup.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_Startup.settings.
+            WWD_Startup.settings.configure(self.xMSF)
+            # set resource needed for web page.
+            # sort the styles alphabetically
+            #COMMENTED
+            WWD_Startup.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_Startup.settings.cp_SavedSessions.childrenList
+
+        WWD_Startup.settings.savedSessions.clear()
+        for index,item in enumerate(sessions):
+            WWD_Startup.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_Startup.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_Startup.settings.cp_SavedSessions.childrenList, None)
+        # set the selected session to load. (step 1)
+        self.selectSession()
+        # fill the styles list.
+        ListModelBinder.fillList(self.lstStyles,
+            WWD_Startup.settings.cp_Styles.childrenList, None)
+        # fill the save session combobox (step 7)
+        ListModelBinder.fillComboBox(self.cbSaveSettings,
+            WWD_Startup.settings.savedSessions.childrenList, None)
+
+    def selectSession(self):
+        selectedSession = 0
+        if WWD_Startup.settings.cp_LastSavedSession is not None \
+                and not WWD_Startup.settings.cp_LastSavedSession == "":
+            ses = WWD_Startup.settings.cp_SavedSessions.getElement(
+                settings.cp_LastSavedSession)
+            if ses is not None:
+                selectedSession = \
+                    WWD_Startup.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_Startup.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_Startup.settings.cp_DefaultSession.cp_Content.cp_Documents)
+        UnoDataAware.attachEditControl(
+            doc, "cp_Title", self.txtDocTitle, True)
+        UnoDataAware.attachEditControl(
+            doc, "cp_Description", self.txtDocInfo, True)
+        UnoDataAware.attachEditControl(
+            doc, "cp_Author", self.txtDocAuthor, True)
+        UnoDataAware.attachListBox(
+            doc, "Exporter", self.lstDocTargetType, False)
+        #page 3 : Layout
+        design = WWD_Startup.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
+        UnoDataAware.attachCheckBox(
+            design, "cp_DisplayDescription", self.chbDocDesc, True)
+        UnoDataAware.attachCheckBox(
+            design, "cp_DisplayAuthor", self.chbDocAuthor, True)
+        UnoDataAware.attachCheckBox(
+            design, "cp_DisplayCreateDate", self.chkDocCreated, True)
+        UnoDataAware.attachCheckBox(
+            design, "cp_DisplayUpdateDate", self.chkDocChanged, True)
+        UnoDataAware.attachCheckBox(
+            design, "cp_DisplayFilename", self.chkDocFilename, True)
+        UnoDataAware.attachCheckBox(
+            design, "cp_DisplayFileFormat", self.chkDocFormat, True)
+        UnoDataAware.attachCheckBox(
+            design, "cp_DisplayFormatIcon", self.chkDocFormatIcon, True)
+        UnoDataAware.attachCheckBox(
+            design, "cp_DisplayPages", self.chkDocPages, True)
+        UnoDataAware.attachCheckBox(
+            design, "cp_DisplaySize", self.chkDocSize, True)
+        RadioDataAware.attachRadioButtons(
+            WWD_Startup.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.
+        '''
+        UnoDataAware.attachListBox(
+            WWD_Startup.settings.cp_DefaultSession.cp_Design,
+            "Style", self.lstStyles, False)
+        #page 6 : site general props
+        UnoDataAware.attachEditControl(
+            WWD_Startup.settings.cp_DefaultSession.cp_GeneralInfo,
+            "cp_Title", self.txtSiteTitle, True)
+        UnoDataAware.attachEditControl(
+            WWD_Startup.settings.cp_DefaultSession.cp_GeneralInfo,
+            "cp_Description", self.txtSiteDesc, True)
+        UnoDataAware.attachDateControl(
+            WWD_Startup.settings.cp_DefaultSession.cp_GeneralInfo,
+            "CreationDate", self.dateSiteCreated, False)
+        UnoDataAware.attachDateControl(
+            WWD_Startup.settings.cp_DefaultSession.cp_GeneralInfo,
+            "UpdateDate", self.dateSiteUpdate, False)
+        UnoDataAware.attachEditControl(
+            WWD_Startup.settings.cp_DefaultSession.cp_GeneralInfo,
+            "cp_Email", self.txtEmail, True)
+        UnoDataAware.attachEditControl(
+            WWD_Startup.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_Startup.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_Startup.settings.cp_DefaultSession.cp_Publishing.getElement(publish)
+        uda = UnoDataAware.attachCheckBox(p, "cp_Publish", checkbox, True)
+        uda.Inverse = True
+        uda.disableObjects = [textbox]
+        #COMMENTED
+        '''if isLabel:
+            aux = UnoDataAware.attachLabel(p, "URL", textbox, False)
+        else:
+            aux = UnoDataAware.attachEditControl(p, "URL", textbox, False)'''
+
+    '''
+    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 mount(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 mount(self, root):
+        ListModelBinder.fillList(lstDocuments, root.cp_Documents.items(), None)
+        self.docsBinder.setListModel(root.cp_Documents)
+        disableDocUpDown()
+
+    '''
+    changes the DataAwares Objects' (in
+    the gioen list) DataObject to the
+    @param data
+    @param list
+    '''
+
+    def mount(self, data, list):
+        i = 0
+        while i < list.size():
+            (list.get(i)).setDataObject(data, True)
+            i += 1
+
+    '''
+    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).
+    '''
+
+    def checkDocument(self, doc, task, xC):
+        try:
+            doc.validate(xMSF, task)
+            return True
+        except FileNotFoundException, ex:
+            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
+            AbstractErrorHandler.showMessage(
+                self.xMSF, xControl.Peer,
+                self.resources.resErrIsDirectory.replace(
+                    "%FILENAME", getFileAccess().getPath(doc.cp_URL, "")),
+                ErrorHandler.ERROR_PROCESS_FATAL)
+            return False
+        except Exceptionp:
+            #something went wrong.
+            exp.printStackTrace()
+            AbstractErrorHandler.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:
+            '''setEnabled(btnDocUp, self.selectedDoc.length == 0 ? Boolean.FALSE : (self.selectedDoc[0] == 0 ? Boolean.FALSE : Boolean.TRUE))
+            setEnabled(btnDocDown, self.selectedDoc.length == 0 ? Boolean.FALSE : (self.selectedDoc[0] + 1 < WWD_Startup.settings.cp_DefaultSession.cp_Content.cp_Documents.getSize() ? Boolean.TRUE : Boolean.FALSE))'''
+        except Exception, e:
+            e.printStackTrace()
+
+    def updateBackgroundText(self):
+        bg = \
+            WWD_Startup.settings.cp_DefaultSession.cp_Design.cp_BackgroundImage
+        if bg is None or bg.equals(""):
+            bg = self.resources.resBackgroundNone
+        else:
+            bg = FileAccess.getPathFilename(getFileAccess().getPath(bg, None))
+
+        Helper.setUnoPropertyValue(
+            txtBackground.Model, PropertyNames.PROPERTY_LABEL, bg)
+
+    def updateIconsetText(self):
+        iconset = WWD_Startup.settings.cp_DefaultSession.cp_Design.cp_IconSet
+        if iconset is None or iconset.equals(""):
+            iconsetName = self.resources.resIconsetNone
+        else:
+            IconSet = WWD_Startup.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:
+            updateBackgroundText()
+            self.stylePreview.refresh(settings.cp_DefaultSession.getStyle(), WWD_Startup.settings.cp_DefaultSession.cp_Design.cp_BackgroundImage)
+            self.dpStylePreview.reload(xMSF)
+        except Exception:
+            ex.printStackTrace()
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 0000000..28b3aaa
--- /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

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list