Kaydet (Commit) 8583086d authored tarafından Javier Fernandez's avatar Javier Fernandez

PyWebWizard: Fixing bugs and implementation of mising features.

Implementing the Iconset and Background selection dialogs.

- Using the new ListModel interface.
- Connected the ListModelListeners.
- Implemented the Renderer capabilities.

Change-Id: I7a4003db662dbae14b7e1a45d21685776a58d2c3
üst 3fe37133
...@@ -16,11 +16,16 @@ ...@@ -16,11 +16,16 @@
# the License at http://www.apache.org/licenses/LICENSE-2.0 . # the License at http://www.apache.org/licenses/LICENSE-2.0 .
# #
import uno import uno
import traceback
from abc import abstractmethod
from threading import RLock from threading import RLock
from .PeerConfig import PeerConfig from .PeerConfig import PeerConfig
from .event.CommonListener import OMouseListenerProcAdapter
from ..common.PropertyNames import PropertyNames from ..common.PropertyNames import PropertyNames
from ..common.HelpIds import HelpIds from ..common.HelpIds import HelpIds
from ..common.IRenderer import IRenderer
from .event.ListDataListener import ListDataListener
from com.sun.star.awt import Size from com.sun.star.awt import Size
...@@ -36,7 +41,7 @@ def synchronized(lock): ...@@ -36,7 +41,7 @@ def synchronized(lock):
return newFunction return newFunction
return wrap return wrap
class ImageList(object): class ImageList(ListDataListener):
NO_BORDER = 0 NO_BORDER = 0
BACKGROUND_COLOR = 16777216 BACKGROUND_COLOR = 16777216
HIDE_PAGE = 99 HIDE_PAGE = 99
...@@ -54,7 +59,7 @@ class ImageList(object): ...@@ -54,7 +59,7 @@ class ImageList(object):
PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_POSITION_Y,
PropertyNames.PROPERTY_STEP) PropertyNames.PROPERTY_STEP)
lock = RLock() lock = RLock()
listModel = [] listModel = None
btnNext = None btnNext = None
btnBack = None btnBack = None
...@@ -74,11 +79,16 @@ class ImageList(object): ...@@ -74,11 +79,16 @@ class ImageList(object):
self.selected = -1 self.selected = -1
self.pageStart = 0 self.pageStart = 0
self.helpURL = 0 self.helpURL = 0
self.renderer = None
self.counterRenderer = self.SimpleCounterRenderer() self.counterRenderer = self.SimpleCounterRenderer()
self.MOVE_SELECTION_VALS = list(range(3)) self.MOVE_SELECTION_VALS = list(range(3))
self.itemListenerList = None
def onMousePressed(self, event):
self.focus(self.getImageIndexFor(self.selected))
def create(self, dialog): def create(self, dialog):
print ("DEBUG !!!! ImageList create 1")
self.oUnoDialog = dialog self.oUnoDialog = dialog
self.dialogModel = dialog.xDialogModel self.dialogModel = dialog.xDialogModel
imageTextHeight = self.imageTextLines * ImageList.LINE_HEIGHT imageTextHeight = self.imageTextLines * ImageList.LINE_HEIGHT
...@@ -119,9 +129,8 @@ class ImageList(object): ...@@ -119,9 +129,8 @@ class ImageList(object):
0, #posx 0, #posx
0, #posy 0, #posy
self.step, True, selectionWidth)) self.step, True, selectionWidth))
print ("DEBUG !!!! ImageList create 2")
xWindow = self.grbxSelectedImage xWindow = self.grbxSelectedImage
xWindow.addMouseListener(None) xWindow.addMouseListener(OMouseListenerProcAdapter(self.onMousePressed))
pNames1 = (PropertyNames.PROPERTY_HEIGHT, pNames1 = (PropertyNames.PROPERTY_HEIGHT,
PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_HELPURL,
PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_X,
...@@ -136,7 +145,6 @@ class ImageList(object): ...@@ -136,7 +145,6 @@ class ImageList(object):
* self.rows + self.gap.Height, self.step, 0, False, * self.rows + self.gap.Height, self.step, 0, False,
self.cols * (self.imageSize.Width + self.gap.Width) \ self.cols * (self.imageSize.Width + self.gap.Width) \
+ self.gap.Width - 2)) + self.gap.Width - 2))
print ("DEBUG !!!! ImageList create 3")
if self.showButtons: if self.showButtons:
ImageList.btnBack = dialog.insertButton( ImageList.btnBack = dialog.insertButton(
self.name + "_btnBack", "prevPage", pNames1, self.name + "_btnBack", "prevPage", pNames1,
...@@ -145,7 +153,6 @@ class ImageList(object): ...@@ -145,7 +153,6 @@ class ImageList(object):
(self.imageSize.Height + self.gap.Height) * \ (self.imageSize.Height + self.gap.Height) * \
self.rows + self.gap.Height + imageTextHeight + 1, self.rows + self.gap.Height + imageTextHeight + 1,
self.step, self.tabIndex + 1, True, 14), self) self.step, self.tabIndex + 1, True, 14), self)
print ("DEBUG !!!! ImageList create 3.1")
ImageList.btnNext = dialog.insertButton( ImageList.btnNext = dialog.insertButton(
self.name + "_btnNext", "nextPage", pNames1, self.name + "_btnNext", "nextPage", pNames1,
(14, HelpIds.getHelpIdString((self.helpURL + 1)), (14, HelpIds.getHelpIdString((self.helpURL + 1)),
...@@ -154,17 +161,15 @@ class ImageList(object): ...@@ -154,17 +161,15 @@ class ImageList(object):
self.pos.Height + (self.imageSize.Height + self.gap.Height) \ self.pos.Height + (self.imageSize.Height + self.gap.Height) \
* self.rows + self.gap.Height + imageTextHeight + 1, * self.rows + self.gap.Height + imageTextHeight + 1,
self.step, self.tabIndex + 2, True, 14), self) self.step, self.tabIndex + 2, True, 14), self)
print ("DEBUG !!!! ImageList create 3.2")
self.lblCounter = dialog.insertLabel( self.lblCounter = dialog.insertLabel(
self.name + "_lblCounter", pNames1, self.name + "_lblCounter", pNames1,
(ImageList.LINE_HEIGHT, "", self.pos.Width + 14 + 1, (ImageList.LINE_HEIGHT, "", self.pos.Width + 14 + 1,int(
self.pos.Height + (self.imageSize.Height + self.gap.Height) \ self.pos.Height + (self.imageSize.Height + self.gap.Height) \
* self.rows + self.gap.Height + imageTextHeight + \ * self.rows + self.gap.Height + imageTextHeight + \
((14 - ImageList.LINE_HEIGHT) / 2), ((14 - ImageList.LINE_HEIGHT) / 2)),
self.step, 0, False, self.cols * \ self.step, 0, False, self.cols * \
(self.imageSize.Width + self.gap.Width) + \ (self.imageSize.Width + self.gap.Width) + \
self.gap.Width - 2 * 14 - 1)) self.gap.Width - 2 * 14 - 1))
print ("DEBUG !!!! ImageList create 3.3")
self.lblCounter.Model.Align = 1 self.lblCounter.Model.Align = 1
ImageList.btnBack.Model.Label = "<" ImageList.btnBack.Model.Label = "<"
ImageList.btnNext.Model.Label = ">" ImageList.btnNext.Model.Label = ">"
...@@ -176,8 +181,7 @@ class ImageList(object): ...@@ -176,8 +181,7 @@ class ImageList(object):
self.m_aImages[r * self.cols + c] = self.createImage(dialog, r, c) self.m_aImages[r * self.cols + c] = self.createImage(dialog, r, c)
self.refreshImages() self.refreshImages()
#COMMENTED self.listModel.addListDataListener(self)
#ImageList.listModel.addListDataListener(None)
#used for optimization #used for optimization
...@@ -185,14 +189,18 @@ class ImageList(object): ...@@ -185,14 +189,18 @@ class ImageList(object):
imageName = self.name + "_image" + str(_row * self.cols + _col) imageName = self.name + "_image" + str(_row * self.cols + _col)
image = dialog.insertImage( image = dialog.insertImage(
imageName, ImageList.IMAGE_PROPS, imageName, ImageList.IMAGE_PROPS,
(ImageList.NO_BORDER, ImageList.BACKGROUND_COLOR, (ImageList.NO_BORDER,
ImageList.BACKGROUND_COLOR,
self.imageSize.Height, self.imageSize.Height,
HelpIds.getHelpIdString(self.helpURL + 1), HelpIds.getHelpIdString(self.helpURL + 1),
self.getImagePosX(_col), self.getImagePosY(_row), self.getImagePosX(_col), self.getImagePosY(_row),
self.scaleImages, self.step, self.tabIndex, self.scaleImages,
False, self.imageSize.Width)) self.step,
self.tabIndex,
False,
self.imageSize.Width))
#COMMENTED #COMMENTED
image.addMouseListener(None) image.addMouseListener(OMouseListenerProcAdapter(self.mousePressed))
image.addKeyListener(None) image.addKeyListener(None)
return image return image
...@@ -216,8 +224,7 @@ class ImageList(object): ...@@ -216,8 +224,7 @@ class ImageList(object):
focusable = True focusable = True
for index, item in enumerate(self.m_aImages): for index, item in enumerate(self.m_aImages):
#COMMENTED oResources = self.renderer.getImageUrls(self.getObjectFor(index))
oResources = None #self.renderer.getImageUrls(self.getObjectFor(index))
if oResources is not None: if oResources is not None:
if len(oResources) == 1: if len(oResources) == 1:
item.Model.ImageURL = oResources[0] item.Model.ImageURL = oResources[0]
...@@ -236,12 +243,12 @@ class ImageList(object): ...@@ -236,12 +243,12 @@ class ImageList(object):
def refreshCounterText(self): def refreshCounterText(self):
self.lblCounter.Model.Label = self.counterRenderer.render( self.lblCounter.Model.Label = self.counterRenderer.render(
self.Counter (self.pageStart + 1, self.pageEnd, self.Counter (self.pageStart + 1, self.pageEnd,
len(ImageList.listModel))) self.listModel.getSize()))
def pageEnd(self): def pageEnd(self):
i = self.pageStart + self.cols * self.rows i = self.pageStart + self.cols * self.rows
if i > ImageList.listModel.getSize() - 1: if i > self.listModel.getSize() - 1:
return ImageList.listModel.getSize() return self.listModel.getSize()
else: else:
return i return i
...@@ -261,22 +268,21 @@ class ImageList(object): ...@@ -261,22 +268,21 @@ class ImageList(object):
''' '''
def moveSelection(self, image): def moveSelection(self, image):
print ("DEBUG !!! moveSelection - image: ", image)
self.grbxSelectedImage.Visible = False self.grbxSelectedImage.Visible = False
row = image / self.cols row = int(image / self.cols)
if self.rowSelect: if self.rowSelect:
col = 0 col = 0
else: else:
col = image - (row * self.cols) col = image - (row * self.cols)
self.MOVE_SELECTION_VALS[0] = \ self.MOVE_SELECTION_VALS[0] = \
(self.getImagePosX(col) - self.selectionGap.Width) int(self.getImagePosX(col) - self.selectionGap.Width)
self.MOVE_SELECTION_VALS[1] = \ self.MOVE_SELECTION_VALS[1] = \
(self.getImagePosY(row) - self.selectionGap.Height) int(self.getImagePosY(row) - self.selectionGap.Height)
uno.invoke(self.grbxSelectedImage.Model, "setPropertyValues", uno.invoke(self.grbxSelectedImage.Model, "setPropertyValues",
((ImageList.MOVE_SELECTION), ((ImageList.MOVE_SELECTION),
(tuple(self.MOVE_SELECTION_VALS)))) (tuple(self.MOVE_SELECTION_VALS))))
if (self.grbxSelectedImage.Model.Step == self.step): if (self.dialogModel.Step == self.step):
self.grbxSelectedImage.Visible = True self.grbxSelectedImage.Visible = True
#now focus... #now focus...
...@@ -293,10 +299,10 @@ class ImageList(object): ...@@ -293,10 +299,10 @@ class ImageList(object):
def getObjectFor(self, i): def getObjectFor(self, i):
ii = self.getIndexFor(i) ii = self.getIndexFor(i)
if ImageList.listModel.getSize() <= ii: if self.listModel.getSize() <= ii:
return None return None
else: else:
return ImageList.listModel.getElementAt(ii) return self.listModel.getElementAt(ii)
''' '''
@param i @param i
...@@ -307,18 +313,16 @@ class ImageList(object): ...@@ -307,18 +313,16 @@ class ImageList(object):
return self.pageStart + i return self.pageStart + i
def getImageIndexFor(self, i): def getImageIndexFor(self, i):
print ("DEBUG !!! getImageIndexFor - i: ", i)
return i - self.pageStart return i - self.pageStart
def intervalAdded(self, event): def intervalAdded(self, event):
print ("DEBUG !!!! intervalAdded - event: ", event)
if event.getIndex0() <= self.selected: if event.getIndex0() <= self.selected:
if event.getIndex1() <= self.selected: if event.getIndex1() <= self.selected:
self.selected += event.getIndex1() - event.getIndex0() + 1 self.selected += event.getIndex1() - event.getIndex0() + 1
if event.getIndex0() < self.pageStart or \ if event.getIndex0() < self.pageStart or \
event.getIndex1() < (self.pageStart + getRows() + getCols()): event.getIndex1() < (self.pageStart + self.rows + self.cols):
refreshImages() self.refreshImages()
''' '''
Registers ItemListener to receive events. Registers ItemListener to receive events.
...@@ -328,8 +332,7 @@ class ImageList(object): ...@@ -328,8 +332,7 @@ class ImageList(object):
@synchronized(lock) @synchronized(lock)
def addItemListener(self, listener): def addItemListener(self, listener):
if self.itemListenerList is None: if self.itemListenerList is None:
self.itemListenerList = java.util.ArrayList.ArrayList() self.itemListenerList = []
self.itemListenerList.append(listener) self.itemListenerList.append(listener)
''' '''
...@@ -348,49 +351,57 @@ class ImageList(object): ...@@ -348,49 +351,57 @@ class ImageList(object):
''' '''
def fireItemSelected(self): def fireItemSelected(self):
with ImageList.lock:
if self.itemListenerList is None: if self.itemListenerList is None:
return return
auxlist = list(self.itemListenerList)
auxlist = self.itemListenerList.clone()
for i in auxlist: for i in auxlist:
i.itemStateChanged(None) i.itemStateChanged(None)
def getSelected(self):
return self.selected
def setSelected(self, _object): def setSelected(self, _object):
print ("DEBUG !!!! setSelected - _object: ", _object) if (isinstance (_object, int)):
if not isinstance(_object, int): self.setSelected1(_object)
_object = -1 elif (_object is None or _object is ""):
if _object is not None: self.setSelected1(-1)
for index, item in enumerate(ImageList.listModel): else:
i = 0
while (i < self.listModel.getSize()):
item = self.listModel.getElementAt(i)
if item == _object: if item == _object:
_object = index self.setSelected1(i)
return return
i += 1
if self.rowSelect and (_object >= 0): def setSelected1(self, index):
_object = (_object / self.cols) * self.cols if self.rowSelect and (index >= 0):
index = int(index / self.cols) * self.cols
if self.selected == _object: if self.selected == index:
return return
self.selected = _object self.selected = index
self.refreshImageText() self.refreshImageText()
self.refreshSelection() self.refreshSelection()
#COMMENTED self.fireItemSelected()
#self.fireItemSelected()
def refreshImageText(self): def refreshImageText(self):
if self.selected >= 0: if self.selected >= 0:
#COMMENTED try:
item = None #ImageList.listModel.getElementAt(self.selected) item = self.listModel.getElementAt(self.selected)
except IndexError:
item = None
traceback.print_exc()
else: else:
item = None item = None
self.lblImageText.Model.Label = " " + self.renderer.render(item) self.lblImageText.Model.Label = " " + self.renderer.render(item)
def nextPage(self): def nextPage(self):
if self.pageStart < listModel().getSize() - self.rows * self.cols: if self.pageStart < self.listModel.getSize() - self.rows * self.cols:
setPageStart(self.pageStart + self.rows * self.cols) self.setPageStart(self.pageStart + self.rows * self.cols)
def prevPage(self): def prevPage(self):
if self.pageStart == 0: if self.pageStart == 0:
...@@ -400,12 +411,19 @@ class ImageList(object): ...@@ -400,12 +411,19 @@ class ImageList(object):
if i < 0: if i < 0:
i = 0 i = 0
setPageStart(i) self.setPageStart(i)
def setPageStart(self, i):
if (i == self.pageStart):
return
self.pageStart = i
self.enableButtons()
self.refreshImages()
def enableButtons(self): def enableButtons(self):
self.enable( self.enable(
ImageList.btnNext, ImageList.btnNext,
bool(self.pageStart + self.rows * self.cols < len(ImageList.listModel))) bool(self.pageStart + self.rows * self.cols < self.listModel.getSize()))
self.enable(ImageList.btnBack, bool(self.pageStart > 0)) self.enable(ImageList.btnBack, bool(self.pageStart > 0))
def enable(self, control, enable): def enable(self, control, enable):
...@@ -417,19 +435,28 @@ class ImageList(object): ...@@ -417,19 +435,28 @@ class ImageList(object):
def getImageFromEvent(self, event): def getImageFromEvent(self, event):
image = (event).Source image = (event).Source
controlName = image.Model.Name controlName = image.Model.Name
return Integer.valueOf(controlName.substring(6 + self.name.length())) return int(controlName[6 + len(self.name):])
def mousePressed(self, event): def mousePressed(self, event):
image = getImageFromEvent(event) image = self.getImageFromEvent(event)
index = getIndexFor(image) index = self.getIndexFor(image)
if index < ImageList.listModel.getSize(): if index < self.listModel.getSize():
focus(image) self.focus(image)
setSelected(index) self.setSelected(index)
def getSelectedObjects(self): def getSelectedObjects(self):
return[listModel().getElementAt(self.selected)] return[self.listModel.getElementAt(self.selected)]
class IImageRenderer(IRenderer):
class SimpleCounterRenderer: # @param listItem
# @return two resource ids for an image referenced in the imaglist resourcefile of the
# wizards project; The second one of them is designed to be used for High Contrast Mode.
@abstractmethod
def getImageUrls(self, listItem):
pass
class SimpleCounterRenderer(IRenderer):
def render(self, counter): def render(self, counter):
return \ return \
...@@ -444,42 +471,44 @@ class ImageList(object): ...@@ -444,42 +471,44 @@ class ImageList(object):
def getSelectedObject(self): def getSelectedObject(self):
if self.selected >= 0: if self.selected >= 0:
return listModel().getElementAt(self.selected) try:
return self.listModel.getElementAt(self.selected)
except IndexError:
traceback.print_exc()
return None return None
def showSelected(self): def showSelected(self):
oldPageStart = self.pageStart oldPageStart = self.pageStart
if self.selected != -1: if self.selected != -1:
self.pageStart = \ self.pageStart = \
(self.selected / len(self.m_aImages)) * len(self.m_aImages) int((self.selected / len(self.m_aImages)) * len(self.m_aImages))
if oldPageStart != self.pageStart: if oldPageStart != self.pageStart:
#COMMENTED self.enableButtons()
#self.enableButtons()
self.refreshImages() self.refreshImages()
def keyPressed(self, ke): def keyPressed(self, ke):
image = getImageFromEvent(ke) image = self.getImageFromEvent(ke)
r = image / getCols() r = image / self.cols
c = image - (r * getCols()) c = image - (r * self.cols)
d = getKeyMove(ke, r, c) d = self.getKeyMove(ke, r, c)
newImage = image + d newImage = image + d
if newImage == image: if newImage == image:
return return
if isFocusable(newImage): if self.isFocusable(newImage):
changeFocus(image, newImage) self.changeFocus(image, newImage)
def isFocusable(self, image): def isFocusable(self, image):
return (image >= 0) and \ return (image >= 0) and \
(getIndexFor(image) < ImageList.listModel.getSize()) (self.getIndexFor(image) < self.listModel.getSize())
def changeFocus(self, oldFocusImage, newFocusImage): def changeFocus(self, oldFocusImage, newFocusImage):
focus(newFocusImage) self.focus(newFocusImage)
defocus(oldFocusImage) self.defocus(oldFocusImage)
def select(self, ke): def select(self, ke):
setSelected(getIndexFor(getImageFromEvent(ke))) self.setSelected(self.getIndexFor(self.getImageFromEvent(ke)))
def focus(self, image): def focus(self, image):
self.m_aImages[image].Model.Tabstop = True self.m_aImages[image].Model.Tabstop = True
...@@ -495,13 +524,13 @@ class ImageList(object): ...@@ -495,13 +524,13 @@ class ImageList(object):
''' '''
def display(self, i): def display(self, i):
isAux = (getCols() * getRows()) isAux = (self.cols * self.rows)
ps = (ImageList.listModel.getSize() / isAux) * isAux ps = (self.listModel.getSize() / isAux) * isAux
setPageStart(ps) self.setPageStart(ps)
def setenabled(self, b): def setenabled(self, b):
i = 0 i = 0
while i < self.m_aImages.length: while i < len(self.m_aImages):
UnoDialog2.setEnabled(self.m_aImages[i], b) UnoDialog2.setEnabled(self.m_aImages[i], b)
i += 1 i += 1
UnoDialog2.setEnabled(self.grbxSelectedImage, b) UnoDialog2.setEnabled(self.grbxSelectedImage, b)
......
...@@ -93,3 +93,20 @@ class KeyListenerProcAdapter( unohelper.Base, XKeyListener ): ...@@ -93,3 +93,20 @@ class KeyListenerProcAdapter( unohelper.Base, XKeyListener ):
def keyPressed(self, KeyEvent): def keyPressed(self, KeyEvent):
if callable( self.oProcToCall ): if callable( self.oProcToCall ):
self.oProcToCall(KeyEvent) self.oProcToCall(KeyEvent)
def disposing(self, Event):
# TODO: Implement ?
pass
from com.sun.star.awt import XMouseListener
class OMouseListenerProcAdapter( unohelper.Base, XMouseListener ):
def __init__(self, oProcToCall):
self.oProcToCall = oProcToCall
def mousePressed(self, MouseEvent):
if callable( self.oProcToCall ):
self.oProcToCall(MouseEvent)
def disposing(self, Event):
# TODO: Implement ?
pass
...@@ -16,20 +16,25 @@ ...@@ -16,20 +16,25 @@
# the License at http://www.apache.org/licenses/LICENSE-2.0 . # the License at http://www.apache.org/licenses/LICENSE-2.0 .
# #
class ListModelBinder(object): from abc import abstractmethod
from .ListDataListener import ListDataListener
class ListModelBinder(ListDataListener):
def __init__(self, unoListBox, listModel_): def __init__(self, unoListBox, listModel_):
self.unoList = unoListBox self.unoList = unoListBox
self.unoListModel = unoListBox.Model self.unoListModel = unoListBox.Model
#COMMENTED self.listModel = None
#self.setListModel(listModel_) self.setListModel(listModel_)
self.renderer = self.Renderer()
def setListModel(self, newListModel): def setListModel(self, newListModel):
if self.listModel is not None: if self.listModel is not None:
self.listModel.removeListDataListener(self) self.listModel.removeListDataListener(self)
self.listModel = newListModel self.listModel = newListModel
self.listModel.addListDataListener(this) self.listModel.addListDataListener(self)
def contentsChanged(self, lde): def contentsChanged(self, lde):
selected = self.getSelectedItems() selected = self.getSelectedItems()
...@@ -50,9 +55,9 @@ class ListModelBinder(object): ...@@ -50,9 +55,9 @@ class ListModelBinder(object):
self.unoList.addItem(self.getItemString(i), i) self.unoList.addItem(self.getItemString(i), i)
def getItemString(self, i): def getItemString(self, i):
return self.getItemString(self.listModel.getElementAt(i)) return self.getItemString1(self.listModel.getElementAt(i))
def getItemString(self, item): def getItemString1(self, item):
return self.renderer.render(item) return self.renderer.render(item)
def getSelectedItems(self): def getSelectedItems(self):
...@@ -62,11 +67,24 @@ class ListModelBinder(object): ...@@ -62,11 +67,24 @@ class ListModelBinder(object):
self.unoListModel.SelectedItems = selected; self.unoListModel.SelectedItems = selected;
def intervalAdded(self, lde): def intervalAdded(self, lde):
for i in xrange(lde.Index0, lde.Index1): i = lde.getIndex0()
while (i <= lde.getIndex1()):
self.insert(i) self.insert(i)
i += 1
def intervalRemoved(self, lde): def intervalRemoved(self, lde):
self.remove(lde.Index0, lde.Index1) self.remove(lde.getIndex0(), lde.getIndex1())
class Renderer:
@abstractmethod
def render(self, item):
if (item is None):
return ""
elif (isinstance(item, int)):
return str(item)
else:
return item.toString()
@classmethod @classmethod
def fillList(self, xlist, items, renderer): def fillList(self, xlist, items, renderer):
...@@ -76,7 +94,7 @@ class ListModelBinder(object): ...@@ -76,7 +94,7 @@ class ListModelBinder(object):
if renderer is not None: if renderer is not None:
aux = renderer.render(index) aux = renderer.render(index)
else: else:
aux = item.cp_Name aux = item.toString()
xlist.addItem(aux, index) xlist.addItem(aux, index)
@classmethod @classmethod
......
...@@ -24,6 +24,8 @@ from .WebWizardConst import * ...@@ -24,6 +24,8 @@ from .WebWizardConst import *
from ..common.SystemDialog import SystemDialog from ..common.SystemDialog import SystemDialog
from ..common.FileAccess import FileAccess from ..common.FileAccess import FileAccess
from ..common.Configuration import Configuration from ..common.Configuration import Configuration
from ..common.ListModel import ListModel
from ..ui.ImageList import ImageList
from com.sun.star.awt import Size from com.sun.star.awt import Size
...@@ -47,8 +49,9 @@ class BackgroundsDialog(ImageListDialog): ...@@ -47,8 +49,9 @@ class BackgroundsDialog(ImageListDialog):
self.fileAccess = FileAccess(xmsf) self.fileAccess = FileAccess(xmsf)
#COMMENTED #COMMENTED
#self.il.setListModel(Model(set_)) #self.il.setListModel(Model(set_))
self.il.listModel = self.Model(set_, self)
self.il.imageSize = Size (40, 40) self.il.imageSize = Size (40, 40)
#self.il.setRenderer(BGRenderer (0)) self.il.renderer = self.BGRenderer(0, self)
self.build() self.build()
''' '''
...@@ -106,26 +109,22 @@ class BackgroundsDialog(ImageListDialog): ...@@ -106,26 +109,22 @@ class BackgroundsDialog(ImageListDialog):
@author rpiterman @author rpiterman
''' '''
class BGRenderer(object): class BGRenderer(ImageList.IImageRenderer):
cut = 0
def __init__(self, cut_): def __init__(self, cut_, parent):
ImageListDialog.ImageListDialog_body()
self.cut = cut_ self.cut = cut_
self.parent = parent
def getImageUrls(self, listItem): def getImageUrls(self, listItem):
sRetUrls = [] sRetUrls = []
if (listItem is not None): if (listItem is not None):
sRetUrls.append(listItem) sRetUrls.append(listItem)
return sRetUrls return sRetUrls
return None return None
def render(self, _object): def render(self, obj):
if _object is None: return "" if (obj is None) else FileAccess.getFilename(self.parent.fileAccess.getPath(obj, None))
return ""
else:
return FileAccess.getPathFilename(
self.fileAccess.getPath(_object, None))
''' '''
This is a list model for the image list of the This is a list model for the image list of the
...@@ -138,7 +137,11 @@ class BackgroundsDialog(ImageListDialog): ...@@ -138,7 +137,11 @@ class BackgroundsDialog(ImageListDialog):
@author rpiterman @author rpiterman
''' '''
class Model(object): class Model(ListModel):
parent = None
listModel = []
''' '''
constructor. </br> constructor. </br>
see class description for a description of see class description for a description of
...@@ -146,17 +149,18 @@ class BackgroundsDialog(ImageListDialog): ...@@ -146,17 +149,18 @@ class BackgroundsDialog(ImageListDialog):
@param model the configuration set of the background images. @param model the configuration set of the background images.
''' '''
def __init__(self, model): def __init__(self, model, parent):
self.parent = parent
try: try:
i = 0 i = 0
while i < model.getSize(): while i < model.getSize():
image = model.getElementAt(i) image = model.getElementAt(i)
path = self.sd.xStringSubstitution.substituteVariables( path = parent.sd.xStringSubstitution.substituteVariables(
image.cp_Href, False) image.cp_Href, False)
if self.fileAccess.exists(path, False): if parent.fileAccess.exists(path, False):
addDir(path) self.addDir(path)
else: else:
remove(model.getKey(image)) self.remove(model.getKey(image))
i += 1 i += 1
except Exception: except Exception:
...@@ -173,7 +177,7 @@ class BackgroundsDialog(ImageListDialog): ...@@ -173,7 +177,7 @@ class BackgroundsDialog(ImageListDialog):
def remove(self, imageName): def remove(self, imageName):
try: try:
conf = Configuration.getConfigurationRoot( conf = Configuration.getConfigurationRoot(
self.xMSF, WebWizardConst.CONFIG_PATH + "/BackgroundImages", self.parent.xMSF, CONFIG_PATH + "/BackgroundImages",
True) True)
Configuration.removeNode(conf, imageName) Configuration.removeNode(conf, imageName)
except Exception: except Exception:
...@@ -187,10 +191,10 @@ class BackgroundsDialog(ImageListDialog): ...@@ -187,10 +191,10 @@ class BackgroundsDialog(ImageListDialog):
''' '''
def addDir(self, url): def addDir(self, url):
if self.fileAccess.isDirectory(url): if self.parent.fileAccess.isDirectory(url):
self.add(self.fileAccess.listFiles(url, False)) self.add(self.parent.fileAccess.listFiles(url, False))
else: else:
self.add(url) self.add1(url)
''' '''
adds the given filenames (urls) to adds the given filenames (urls) to
...@@ -212,7 +216,13 @@ class BackgroundsDialog(ImageListDialog): ...@@ -212,7 +216,13 @@ class BackgroundsDialog(ImageListDialog):
''' '''
def add1(self, filename): def add1(self, filename):
lcase = filename.toLowerCase() lcase = filename.lower()
if lcase.endsWith("jpg") or lcase.endsWith("jpeg") or \ if lcase.endswith("jpg") or lcase.endswith("jpeg") or \
lcase.endsWith("gif"): lcase.endswith("gif"):
Model.this.addElement(filename) self.listModel.append(filename)
def getSize(self):
return len(self.listModel)
def getElementAt(self, arg0):
return self.listModel[arg0]
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
from .ImageListDialog import ImageListDialog from .ImageListDialog import ImageListDialog
from .WWHID import HID_IS from .WWHID import HID_IS
from ..common.FileAccess import FileAccess from ..common.FileAccess import FileAccess
from ..common.ListModel import ListModel
from ..ui.ImageList import ImageList
from com.sun.star.awt import Size from com.sun.star.awt import Size
...@@ -31,7 +33,7 @@ It also implements the ImageList.ImageRenderer interface, to handle ...@@ -31,7 +33,7 @@ It also implements the ImageList.ImageRenderer interface, to handle
its own objects. its own objects.
''' '''
class IconsDialog(ImageListDialog): class IconsDialog(ImageListDialog, ImageList.IImageRenderer, ListModel):
def __init__(self, xmsf, set_, resources): def __init__(self, xmsf, set_, resources):
super(IconsDialog, self).__init__(xmsf, HID_IS, super(IconsDialog, self).__init__(xmsf, HID_IS,
...@@ -48,7 +50,7 @@ class IconsDialog(ImageListDialog): ...@@ -48,7 +50,7 @@ class IconsDialog(ImageListDialog):
self.icons = \ self.icons = \
["firs", "prev", "next", "last", "nav", "text", "up", "down"] ["firs", "prev", "next", "last", "nav", "text", "up", "down"]
self.set = set_ self.set = set_
self.objects = (self.set.getSize() * len(self.icons),) self.objects = range(self.set.getSize() * len(self.icons))
self.il.listModel = self self.il.listModel = self
self.il.renderer = self self.il.renderer = self
...@@ -66,16 +68,24 @@ class IconsDialog(ImageListDialog): ...@@ -66,16 +68,24 @@ class IconsDialog(ImageListDialog):
if self.getSelected() is None: if self.getSelected() is None:
return None return None
else: else:
return self.set.getKey((self.getSelected()) / len(self.icons)) selected = self.getSelected()
value = int(selected / len(self.icons))
return "iconset" + str(value)
#return self.set.getKey(value)
def setIconset(self, iconset): def setIconset(self, iconset):
#COMMENTED icon = self.set.getIndexOf(self.set.getElement(iconset)) * len(self.icons)
icon = 0 #self.set.getIndexOf(self.set.getElement(iconset)) * len(self.icons)
aux = None aux = None
if icon >=0: if icon >=0:
aux = self.objects[icon] aux = self.objects[icon]
self.setSelected(aux) self.setSelected(aux)
def addListDataListener(self, listener):
pass
def removeListDataListener(self, listener):
pass
def getSize(self): def getSize(self):
return self.set.getSize() * len(self.icons) return self.set.getSize() * len(self.icons)
...@@ -83,10 +93,10 @@ class IconsDialog(ImageListDialog): ...@@ -83,10 +93,10 @@ class IconsDialog(ImageListDialog):
return self.objects[arg0] return self.objects[arg0]
def getImageUrls(self, listItem): def getImageUrls(self, listItem):
i = (listItem).intValue() i = listItem
iset = getIconsetNum(i) iset = self.getIconsetNum(i)
icon = getIconNum(i) icon = self.getIconNum(i)
sRetUrls = range(2) sRetUrls = list(range(2))
sRetUrls[0] = self.htmlexpDirectory + "/htmlexpo/" \ sRetUrls[0] = self.htmlexpDirectory + "/htmlexpo/" \
+ self.getIconsetPref(iset) + self.icons[icon] + self.getIconsetPostfix(iset) + self.getIconsetPref(iset) + self.icons[icon] + self.getIconsetPostfix(iset)
sRetUrls[1] = sRetUrls[0] sRetUrls[1] = sRetUrls[0]
...@@ -95,12 +105,13 @@ class IconsDialog(ImageListDialog): ...@@ -95,12 +105,13 @@ class IconsDialog(ImageListDialog):
def render(self, object): def render(self, object):
if object is None: if object is None:
return "" return ""
i = (object).intValue()
i = object
iset = self.getIconsetNum(i) iset = self.getIconsetNum(i)
return self.getIconset1(iset).cp_Name return self.getIconset1(iset).cp_Name
def getIconsetNum(self, i): def getIconsetNum(self, i):
return i / self.icons.length return int(i / len(self.icons))
def getIconNum(self, i): def getIconNum(self, i):
return i % len(self.icons) return i % len(self.icons)
......
...@@ -21,6 +21,7 @@ from ..ui.UnoDialog2 import UnoDialog2 ...@@ -21,6 +21,7 @@ from ..ui.UnoDialog2 import UnoDialog2
from ..ui.ImageList import ImageList from ..ui.ImageList import ImageList
from ..common.HelpIds import HelpIds from ..common.HelpIds import HelpIds
from ..common.PropertyNames import PropertyNames from ..common.PropertyNames import PropertyNames
from ..common.IRenderer import IRenderer
from com.sun.star.awt import FontDescriptor from com.sun.star.awt import FontDescriptor
from com.sun.star.awt.PushButtonType import OK, CANCEL, HELP, STANDARD from com.sun.star.awt.PushButtonType import OK, CANCEL, HELP, STANDARD
...@@ -93,7 +94,6 @@ class ImageListDialog(UnoDialog2): ...@@ -93,7 +94,6 @@ class ImageListDialog(UnoDialog2):
''' '''
def build(self): def build(self):
print ("DEBUG !!!! ImageListDialog build 1")
#set dialog properties... #set dialog properties...
ilWidth = (self.il.imageSize.Width + self.il.gap.Width) \ ilWidth = (self.il.imageSize.Width + self.il.gap.Width) \
* self.il.cols + self.il.gap.Width * self.il.cols + self.il.gap.Width
...@@ -169,7 +169,6 @@ class ImageListDialog(UnoDialog2): ...@@ -169,7 +169,6 @@ class ImageListDialog(UnoDialog2):
self.il.helpURL = self.hid + 5 self.il.helpURL = self.hid + 5
self.il.tabIndex = 1 self.il.tabIndex = 1
self.il.create(self) self.il.create(self)
print ("DEBUG !!!! ImageListDialog build 2")
self.lblTitle = self.insertLabel("lblTitle", self.lblTitle = self.insertLabel("lblTitle",
("FontDescriptor", ("FontDescriptor",
PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HEIGHT,
...@@ -213,7 +212,7 @@ class ImageListDialog(UnoDialog2): ...@@ -213,7 +212,7 @@ class ImageListDialog(UnoDialog2):
"%TOTAL" with the respective values. "%TOTAL" with the respective values.
@author rpiterman @author rpiterman
''' '''
class ARenderer(object): class ARenderer(IRenderer):
''' '''
@param aTempalte a template for this renderer. @param aTempalte a template for this renderer.
......
...@@ -51,10 +51,6 @@ session methods. ...@@ -51,10 +51,6 @@ session methods.
class WWD_Events(WWD_Startup): class WWD_Events(WWD_Startup):
iconsDialog = None
bgDialog = None
docPreview = None
''' '''
He - my constructor ! He - my constructor !
I add a window listener, which, when I add a window listener, which, when
...@@ -70,6 +66,9 @@ class WWD_Events(WWD_Startup): ...@@ -70,6 +66,9 @@ class WWD_Events(WWD_Startup):
self.exitOnCreate = True self.exitOnCreate = True
self.time = 0 self.time = 0
self.count = 0 self.count = 0
self.bgDialog = None
self.iconsDialog = None
self.docPreview = None
@classmethod @classmethod
def main(self, args): def main(self, args):
...@@ -341,18 +340,18 @@ class WWD_Events(WWD_Startup): ...@@ -341,18 +340,18 @@ class WWD_Events(WWD_Startup):
def chooseBackground(self): def chooseBackground(self):
try: try:
self.setEnabled(self.btnBackgrounds, False) self.setEnabled(self.btnBackgrounds, False)
if WWD_Events.bgDialog is None: if self.bgDialog is None:
WWD_Events.bgDialog = BackgroundsDialog( self.bgDialog = BackgroundsDialog(
self.xMSF, WWD_Startup.settings.cp_BackgroundImages, self.xMSF, self.settings.cp_BackgroundImages,
self.resources) self.resources)
WWD_Events.bgDialog.createWindowPeer(self.xUnoDialog.Peer) self.bgDialog.createWindowPeer(self.xUnoDialog.Peer)
WWD_Events.bgDialog.setSelected( self.bgDialog.setSelected(
WWD_Startup.settings.cp_DefaultSession.cp_Design.cp_BackgroundImage) self.settings.cp_DefaultSession.cp_Design.cp_BackgroundImage)
i = WWD_Events.bgDialog.executeDialogFromParent(self) i = self.bgDialog.executeDialogFromParent(self)
if i == 1: if i == 1:
#ok #ok
self.setBackground(WWD_Events.bgDialog.getSelected()) self.setBackground(self.bgDialog.getSelected())
except Exception: except Exception:
traceback.print_exc() traceback.print_exc()
finally: finally:
...@@ -366,7 +365,7 @@ class WWD_Events(WWD_Startup): ...@@ -366,7 +365,7 @@ class WWD_Events(WWD_Startup):
if background is None: if background is None:
background = "" background = ""
WWD_Startup.settings.cp_DefaultSession.cp_Design.cp_BackgroundImage \ self.settings.cp_DefaultSession.cp_Design.cp_BackgroundImage \
= background = background
self.refreshStylePreview() self.refreshStylePreview()
...@@ -377,18 +376,18 @@ class WWD_Events(WWD_Startup): ...@@ -377,18 +376,18 @@ class WWD_Events(WWD_Startup):
def chooseIconset(self): def chooseIconset(self):
try: try:
self.setEnabled(self.btnIconSets, False) self.setEnabled(self.btnIconSets, False)
if WWD_Events.iconsDialog is None: if self.iconsDialog is None:
WWD_Events.iconsDialog = IconsDialog( self.iconsDialog = IconsDialog(
self.xMSF, WWD_Startup.settings.cp_IconSets, self.xMSF, self.settings.cp_IconSets,
self.resources) self.resources)
WWD_Events.iconsDialog.createWindowPeer(self.xUnoDialog.Peer) self.iconsDialog.createWindowPeer(self.xUnoDialog.Peer)
WWD_Events.iconsDialog.setIconset( self.iconsDialog.setIconset(
WWD_Startup.settings.cp_DefaultSession.cp_Design.cp_IconSet) self.settings.cp_DefaultSession.cp_Design.cp_IconSet)
i = WWD_Events.iconsDialog.executeDialogFromParent(self) i = self.iconsDialog.executeDialogFromParent(self)
if i == 1: if i == 1:
#ok #ok
self.setIconset(WWD_Events.iconsDialog.getIconset()) self.setIconset(self.iconsDialog.getIconset())
except Exception: except Exception:
traceback.print_exc() traceback.print_exc()
finally: finally:
...@@ -399,7 +398,7 @@ class WWD_Events(WWD_Startup): ...@@ -399,7 +398,7 @@ class WWD_Events(WWD_Startup):
''' '''
def setIconset(self, icon): def setIconset(self, icon):
WWD_Startup.settings.cp_DefaultSession.cp_Design.cp_IconSet = icon self.settings.cp_DefaultSession.cp_Design.cp_IconSet = icon
self.updateIconsetText() self.updateIconsetText()
''' '''
...@@ -892,11 +891,11 @@ class WWD_Events(WWD_Startup): ...@@ -892,11 +891,11 @@ class WWD_Events(WWD_Startup):
self.dpStylePreview.dispose() self.dpStylePreview.dispose()
self.stylePreview.cleanup() self.stylePreview.cleanup()
if WWD_Events.bgDialog is not None: if self.bgDialog is not None:
WWD_Events.bgDialog.xUnoDialog.dispose() self.bgDialog.xUnoDialog.dispose()
if WWD_Events.iconsDialog is not None: if self.iconsDialog is not None:
WWD_Events.iconsDialog.xUnoDialog.dispose() self.iconsDialog.xUnoDialog.dispose()
if self.ftpDialog is not None: if self.ftpDialog is not None:
self.ftpDialog.xUnoDialog.dispose() self.ftpDialog.xUnoDialog.dispose()
......
...@@ -19,6 +19,9 @@ import traceback ...@@ -19,6 +19,9 @@ import traceback
from ..common.ConfigGroup import ConfigGroup from ..common.ConfigGroup import ConfigGroup
from ..common.Configuration import Configuration from ..common.Configuration import Configuration
from ..common.XMLProvider import XMLProvider from ..common.XMLProvider import XMLProvider
from ..ui.event.EventListenerList import EventListenerList
from ..ui.event.ListDataEvent import ListDataEvent
from ..ui.event.ListDataListener import ListDataListener
class WebConfigSet(ConfigGroup): class WebConfigSet(ConfigGroup):
''' '''
...@@ -36,6 +39,7 @@ class WebConfigSet(ConfigGroup): ...@@ -36,6 +39,7 @@ class WebConfigSet(ConfigGroup):
self.childrenMap = {} self.childrenMap = {}
self.childrenList = [] self.childrenList = []
self.noNulls = False self.noNulls = False
self.listenerList = None
def add(self, name, o): def add(self, name, o):
print ("DEBUG !!! WebConfigSet.add -- name: ", name) print ("DEBUG !!! WebConfigSet.add -- name: ", name)
...@@ -49,6 +53,7 @@ class WebConfigSet(ConfigGroup): ...@@ -49,6 +53,7 @@ class WebConfigSet(ConfigGroup):
i = int(name) i = int(name)
print ("DEBUG !!! WebConfigSet.add -- name IS an integer.") print ("DEBUG !!! WebConfigSet.add -- name IS an integer.")
self.childrenList.insert(i, o) self.childrenList.insert(i, o)
self.fireListDataListenerIntervalAdded(i, i);
except Exception: except Exception:
print ("DEBUG !!! WebConfigSet.add -- name IS NOT an integer.") print ("DEBUG !!! WebConfigSet.add -- name IS NOT an integer.")
try: try:
...@@ -66,6 +71,7 @@ class WebConfigSet(ConfigGroup): ...@@ -66,6 +71,7 @@ class WebConfigSet(ConfigGroup):
self.childrenList.insert(i, o) self.childrenList.insert(i, o)
if oldSize > i: if oldSize > i:
oldSize = i oldSize = i
self.fireListDataListenerIntervalAdded(oldSize, i);
except Exception: except Exception:
if (oldO is not None): if (oldO is not None):
print ("DEBUG !!! WebConfigSet.add -- No cp_Index attribute, but element already present, so replace it.") print ("DEBUG !!! WebConfigSet.add -- No cp_Index attribute, but element already present, so replace it.")
...@@ -74,6 +80,7 @@ class WebConfigSet(ConfigGroup): ...@@ -74,6 +80,7 @@ class WebConfigSet(ConfigGroup):
else: else:
print ("DEBUG !!! WebConfigSet.add -- No cp_Index attribute, so just append it.") print ("DEBUG !!! WebConfigSet.add -- No cp_Index attribute, so just append it.")
self.childrenList.append(o) self.childrenList.append(o)
self.fireListDataListenerIntervalAdded(self.getSize() - 1, self.getSize() - 1);
def writeConfiguration(self, configView, param): def writeConfiguration(self, configView, param):
...@@ -126,7 +133,7 @@ class WebConfigSet(ConfigGroup): ...@@ -126,7 +133,7 @@ class WebConfigSet(ConfigGroup):
self.childrenMap.remove(key) self.childrenMap.remove(key)
i = self.childrenList.indexOf(obj) i = self.childrenList.indexOf(obj)
self.childrenList.remove(obj) self.childrenList.remove(obj)
#fireListDataListenerIntervalRemoved(i, i) self.fireListDataListenerIntervalRemoved(i, i)
def remove(self, i): def remove(self, i):
o = getElementAt(i) o = getElementAt(i)
...@@ -136,6 +143,9 @@ class WebConfigSet(ConfigGroup): ...@@ -136,6 +143,9 @@ class WebConfigSet(ConfigGroup):
self.childrenMap.clear() self.childrenMap.clear()
del self.childrenList[:] del self.childrenList[:]
def update(i):
self.fireListDataListenerContentsChanged(i, i)
def createDOM(self, parent): def createDOM(self, parent):
items = self.childrenList items = self.childrenList
i = 0 i = 0
...@@ -207,3 +217,49 @@ class WebConfigSet(ConfigGroup): ...@@ -207,3 +217,49 @@ class WebConfigSet(ConfigGroup):
def sort(self, comparator): def sort(self, comparator):
self.childrenList.sort(comparator) self.childrenList.sort(comparator)
# Registers ListDataListener to receive events.
# @param listener The listener to register.
def addListDataListener(self, listener):
if (self.listenerList is None):
self.listenerList = EventListenerList()
self.listenerList.add(listener)
# Removes ListDataListener from the list of listeners.
# @param listener The listener to remove.
def removeListDataListener(self, listener):
self.listenerList.remove(listener)
# Notifies all registered listeners about the event.
#
# @param event The event to be fired
def fireListDataListenerIntervalAdded(self, i0, i1):
event = ListDataEvent(self, ListDataEvent.INTERVAL_ADDED, i0, i1)
if (self.listenerList is None):
return
for listener in self.listenerList.getListenerList():
if isinstance(listener, ListDataListener):
listener.intervalAdded(event)
# Notifies all registered listeners about the event.
#
# @param event The event to be fired
def fireListDataListenerIntervalRemoved(self, i0, i1):
event = ListDataEvent(self, ListDataEvent.INTERVAL_REMOVED, i0, i1)
if (self.listenerList is None):
return
for listener in self.listenerList.getListenerList():
if isinstance(listener, ListDataListener):
listener.intervalRemoved(event)
# Notifies all registered listeners about the event.
#
# @param event The event to be fired
def fireListDataListenerContentsChanged(self, i0, i1):
event = ListDataEvent(self, ListDataEvent.CONTENTS_CHANGED, i0, i1)
if (self.listenerList is None):
return
for listener in self.listenerList.getListenerList():
if isinstance(listener, ListDataListener):
listener.contentsChanged(event)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment