1*a1b4a26bSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*a1b4a26bSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*a1b4a26bSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*a1b4a26bSAndrew Rist  * distributed with this work for additional information
6*a1b4a26bSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*a1b4a26bSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*a1b4a26bSAndrew Rist  * "License"); you may not use this file except in compliance
9*a1b4a26bSAndrew Rist  * with the License.  You may obtain a copy of the License at
10*a1b4a26bSAndrew Rist  *
11*a1b4a26bSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*a1b4a26bSAndrew Rist  *
13*a1b4a26bSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*a1b4a26bSAndrew Rist  * software distributed under the License is distributed on an
15*a1b4a26bSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*a1b4a26bSAndrew Rist  * KIND, either express or implied.  See the License for the
17*a1b4a26bSAndrew Rist  * specific language governing permissions and limitations
18*a1b4a26bSAndrew Rist  * under the License.
19*a1b4a26bSAndrew Rist  *
20*a1b4a26bSAndrew Rist  *************************************************************/
21*a1b4a26bSAndrew Rist 
22*a1b4a26bSAndrew Rist 
23cdf0e10cSrcweir package com.sun.star.wizards.ui;
24cdf0e10cSrcweir 
25cdf0e10cSrcweir // import com.sun.star.awt.*;
26cdf0e10cSrcweir 
27cdf0e10cSrcweir import com.sun.star.awt.Key;
28cdf0e10cSrcweir import com.sun.star.awt.KeyEvent;
29cdf0e10cSrcweir import com.sun.star.awt.MouseEvent;
30cdf0e10cSrcweir import com.sun.star.awt.Size;
31cdf0e10cSrcweir import com.sun.star.awt.XButton;
32cdf0e10cSrcweir import com.sun.star.awt.XControl;
33cdf0e10cSrcweir import com.sun.star.awt.XFixedText;
34cdf0e10cSrcweir import com.sun.star.awt.XItemEventBroadcaster;
35cdf0e10cSrcweir import com.sun.star.awt.XItemListener;
36cdf0e10cSrcweir import com.sun.star.awt.XKeyListener;
37cdf0e10cSrcweir import com.sun.star.awt.XMouseListener;
38cdf0e10cSrcweir import com.sun.star.awt.XWindow;
39cdf0e10cSrcweir import com.sun.star.lang.EventObject;
40cdf0e10cSrcweir import com.sun.star.uno.UnoRuntime;
41cdf0e10cSrcweir import com.sun.star.wizards.common.Helper;
42cdf0e10cSrcweir import com.sun.star.wizards.common.HelpIds;
43cdf0e10cSrcweir import com.sun.star.wizards.common.IRenderer;
44cdf0e10cSrcweir import com.sun.star.wizards.common.PropertyNames;
45cdf0e10cSrcweir import com.sun.star.wizards.ui.event.*;
46cdf0e10cSrcweir 
47cdf0e10cSrcweir 
48cdf0e10cSrcweir //import com.sun.star.awt.ItemEvent;
49cdf0e10cSrcweir //import com.sun.star.awt.XItemListener;
50cdf0e10cSrcweir 
51cdf0e10cSrcweir 
52cdf0e10cSrcweir import javax.swing.ListModel;
53cdf0e10cSrcweir import javax.swing.event.ListDataEvent;
54cdf0e10cSrcweir import javax.swing.event.ListDataListener;
55cdf0e10cSrcweir 
56cdf0e10cSrcweir /**
57cdf0e10cSrcweir  *
58cdf0e10cSrcweir  * @author  rpiterman
59cdf0e10cSrcweir  */
60cdf0e10cSrcweir public class ImageList implements XItemEventBroadcaster, ListDataListener
61cdf0e10cSrcweir {
62cdf0e10cSrcweir 
63cdf0e10cSrcweir     // private XControl imgContainer;
64cdf0e10cSrcweir     private XFixedText lblImageText;
65cdf0e10cSrcweir     private XFixedText grbxSelectedImage;
66cdf0e10cSrcweir     private XButton btnBack;
67cdf0e10cSrcweir     private XButton btnNext;
68cdf0e10cSrcweir     private XFixedText lblCounter;
69cdf0e10cSrcweir     private XControl m_aImages[];
70cdf0e10cSrcweir     private boolean benabled = true;
71cdf0e10cSrcweir     private UnoDialog2 oUnoDialog;
72cdf0e10cSrcweir     private Size gap = new Size(4, 4);
73cdf0e10cSrcweir     private int cols = 4;
74cdf0e10cSrcweir     private int rows = 3;
75cdf0e10cSrcweir     private Size imageSize = new Size(20, 20);
76cdf0e10cSrcweir     private Size pos;
77cdf0e10cSrcweir     private Size selectionGap = new Size(2, 2);
78cdf0e10cSrcweir     private boolean showButtons = true;
79cdf0e10cSrcweir     private Short step;
80cdf0e10cSrcweir     private final static Short NO_BORDER = new Short((short) 0);
81cdf0e10cSrcweir     private boolean refreshOverNull = true;
82cdf0e10cSrcweir     private int imageTextLines = 1;
83cdf0e10cSrcweir     private boolean rowSelect = false;
84cdf0e10cSrcweir     public int tabIndex;
85cdf0e10cSrcweir     public Boolean scaleImages = Boolean.TRUE;
86cdf0e10cSrcweir     public String name = "il";
87cdf0e10cSrcweir     private int selected = -1;
88cdf0e10cSrcweir     private int pageStart = 0;
89cdf0e10cSrcweir     public int helpURL = 0;
90cdf0e10cSrcweir     private CommonListener uiEventListener = new CommonListener();
91cdf0e10cSrcweir     private IImageRenderer renderer;
92cdf0e10cSrcweir     private ListModel listModel;
93cdf0e10cSrcweir     public IRenderer counterRenderer = new SimpleCounterRenderer();
94cdf0e10cSrcweir     private Object dialogModel;
95cdf0e10cSrcweir     private ImageKeyListener imageKeyListener;
96cdf0e10cSrcweir     private static final Integer BACKGROUND_COLOR = 16777216;  //new Integer(SystemColor.window.getRGB() + 16777216);
97cdf0e10cSrcweir     private final static Short HIDE_PAGE = new Short((short) 99);
98cdf0e10cSrcweir     private final static Integer TRANSPARENT = new Integer(-1);
99cdf0e10cSrcweir     private final static int LINE_HEIGHT = 8;    //private MethodInvocation METHOD_MOUSE_ENTER_IMAGE;
100cdf0e10cSrcweir     //private MethodInvocation METHOD_MOUSE_EXIT_IMAGE;
101cdf0e10cSrcweir     private MethodInvocation METHOD_MOUSE_PRESSED;
102cdf0e10cSrcweir 
103cdf0e10cSrcweir     /** Getter for property imageSize.
104cdf0e10cSrcweir      * @return Value of property imageSize.
105cdf0e10cSrcweir      *
106cdf0e10cSrcweir      */
getImageSize()107cdf0e10cSrcweir     public Size getImageSize()
108cdf0e10cSrcweir     {
109cdf0e10cSrcweir         return this.imageSize;
110cdf0e10cSrcweir     }
111cdf0e10cSrcweir 
112cdf0e10cSrcweir     /** Setter for property imageSize.
113cdf0e10cSrcweir      * @param imageSize New value of property imageSize.
114cdf0e10cSrcweir      *
115cdf0e10cSrcweir      */
setImageSize(Size imageSize)116cdf0e10cSrcweir     public void setImageSize(Size imageSize)
117cdf0e10cSrcweir     {
118cdf0e10cSrcweir         this.imageSize = imageSize;
119cdf0e10cSrcweir     }
120cdf0e10cSrcweir 
121cdf0e10cSrcweir     class OMouseListener implements XMouseListener
122cdf0e10cSrcweir     {
OMouseListener()123cdf0e10cSrcweir         public OMouseListener()
124cdf0e10cSrcweir         {}
mousePressed(MouseEvent arg0)125cdf0e10cSrcweir         public void mousePressed(MouseEvent arg0)
126cdf0e10cSrcweir         {
127cdf0e10cSrcweir             focus(getImageIndexFor(getSelected()));
128cdf0e10cSrcweir         }
129cdf0e10cSrcweir 
mouseReleased(MouseEvent arg0)130cdf0e10cSrcweir         public void mouseReleased(MouseEvent arg0)
131cdf0e10cSrcweir         {
132cdf0e10cSrcweir         }
133cdf0e10cSrcweir 
mouseEntered(MouseEvent arg0)134cdf0e10cSrcweir         public void mouseEntered(MouseEvent arg0)
135cdf0e10cSrcweir         {
136cdf0e10cSrcweir         }
137cdf0e10cSrcweir 
mouseExited(MouseEvent arg0)138cdf0e10cSrcweir         public void mouseExited(MouseEvent arg0)
139cdf0e10cSrcweir         {
140cdf0e10cSrcweir         }
141cdf0e10cSrcweir 
disposing(EventObject arg0)142cdf0e10cSrcweir         public void disposing(EventObject arg0)
143cdf0e10cSrcweir         {
144cdf0e10cSrcweir         }
145cdf0e10cSrcweir     }
146cdf0e10cSrcweir 
create(UnoDialog2 dialog)147cdf0e10cSrcweir     public void create(UnoDialog2 dialog)
148cdf0e10cSrcweir     {
149cdf0e10cSrcweir         oUnoDialog = dialog;
150cdf0e10cSrcweir         dialogModel = dialog.xDialogModel;
151cdf0e10cSrcweir 
152cdf0e10cSrcweir         int imageTextHeight = imageTextLines * LINE_HEIGHT;
153cdf0e10cSrcweir 
154cdf0e10cSrcweir         PeerConfig opeerConfig = new PeerConfig(dialog);
155cdf0e10cSrcweir 
156cdf0e10cSrcweir         MOVE_SELECTION_VALS[2] = step;
157cdf0e10cSrcweir 
158cdf0e10cSrcweir         XControl imgContainer = dialog.insertImage(name + "lblContainer",
159cdf0e10cSrcweir                 new String[]
160cdf0e10cSrcweir                 {
161cdf0e10cSrcweir                     "BackgroundColor",
162cdf0e10cSrcweir                     PropertyNames.PROPERTY_BORDER,
163cdf0e10cSrcweir                     PropertyNames.PROPERTY_HEIGHT,
164cdf0e10cSrcweir                     PropertyNames.PROPERTY_POSITION_X,
165cdf0e10cSrcweir                     PropertyNames.PROPERTY_POSITION_Y,
166cdf0e10cSrcweir                     PropertyNames.PROPERTY_STEP,
167cdf0e10cSrcweir                     PropertyNames.PROPERTY_WIDTH
168cdf0e10cSrcweir                 },
169cdf0e10cSrcweir                 new Object[]
170cdf0e10cSrcweir                 {
171cdf0e10cSrcweir                     BACKGROUND_COLOR,
172cdf0e10cSrcweir                     new Short((short) 1),
173cdf0e10cSrcweir                     new Integer((imageSize.Height + gap.Height) * rows + gap.Height + imageTextHeight + 1),
174cdf0e10cSrcweir                     new Integer(pos.Width),
175cdf0e10cSrcweir                     new Integer(pos.Height),
176cdf0e10cSrcweir                     step,
177cdf0e10cSrcweir                     new Integer((imageSize.Width + gap.Width) * cols + gap.Width)
178cdf0e10cSrcweir                 });
179cdf0e10cSrcweir 
180cdf0e10cSrcweir         opeerConfig.setPeerProperties(imgContainer, new String[]
181cdf0e10cSrcweir                 {
182cdf0e10cSrcweir                     "MouseTransparent"
183cdf0e10cSrcweir                 }, new Object[]
184cdf0e10cSrcweir                 {
185cdf0e10cSrcweir                     Boolean.TRUE
186cdf0e10cSrcweir                 });
187cdf0e10cSrcweir 
188cdf0e10cSrcweir         //XWindow win = (XWindow)UnoRuntime.queryInterface(XWindow.class,lblContainer);
189cdf0e10cSrcweir         /*dialog.xWindow.addWindowListener(uiEventListener);
190cdf0e10cSrcweir         String dName = (String)Helper.getUnoPropertyValue(dialog.xDialogModel,PropertyNames.PROPERTY_NAME);
191cdf0e10cSrcweir 
192cdf0e10cSrcweir         uiEventListener.add(dName,EventNames.EVENT_WINDOW_SHOWN,"disableContainerMouseEvents",this);
193cdf0e10cSrcweir          */
194cdf0e10cSrcweir         int selectionWidth = rowSelect ?
195cdf0e10cSrcweir             (imageSize.Width + gap.Width) * cols - gap.Width + (selectionGap.Width * 2) :
196cdf0e10cSrcweir             imageSize.Width + (selectionGap.Width * 2);
197cdf0e10cSrcweir 
198cdf0e10cSrcweir         grbxSelectedImage = dialog.insertLabel(name + "_grbxSelected", new String[]
199cdf0e10cSrcweir                 {
200cdf0e10cSrcweir                     "BackgroundColor",
201cdf0e10cSrcweir                     PropertyNames.PROPERTY_BORDER,
202cdf0e10cSrcweir                     PropertyNames.PROPERTY_HEIGHT,
203cdf0e10cSrcweir                     PropertyNames.PROPERTY_POSITION_X,
204cdf0e10cSrcweir                     PropertyNames.PROPERTY_POSITION_Y,
205cdf0e10cSrcweir                     PropertyNames.PROPERTY_STEP,
206cdf0e10cSrcweir                     "Tabstop",
207cdf0e10cSrcweir                     PropertyNames.PROPERTY_WIDTH
208cdf0e10cSrcweir                 }, new Object[]
209cdf0e10cSrcweir                 {
210cdf0e10cSrcweir                     TRANSPARENT,
211cdf0e10cSrcweir                     new Short((short) 1),
212cdf0e10cSrcweir                     new Integer(imageSize.Height + (selectionGap.Height * 2)),
213cdf0e10cSrcweir                     //height
214cdf0e10cSrcweir                     0, //posx
215cdf0e10cSrcweir                     0, //posy
216cdf0e10cSrcweir                     step,
217cdf0e10cSrcweir                     Boolean.TRUE,
218cdf0e10cSrcweir                     new Integer(selectionWidth)
219cdf0e10cSrcweir                 });
220cdf0e10cSrcweir 
221cdf0e10cSrcweir         XWindow xWindow = UnoRuntime.queryInterface(XWindow.class, grbxSelectedImage);
222cdf0e10cSrcweir         xWindow.addMouseListener(new OMouseListener());
223cdf0e10cSrcweir 
224cdf0e10cSrcweir         final String[] pNames1 = new String[]
225cdf0e10cSrcweir         {
226cdf0e10cSrcweir             PropertyNames.PROPERTY_HEIGHT,
227cdf0e10cSrcweir             PropertyNames.PROPERTY_HELPURL,
228cdf0e10cSrcweir             PropertyNames.PROPERTY_POSITION_X,
229cdf0e10cSrcweir             PropertyNames.PROPERTY_POSITION_Y,
230cdf0e10cSrcweir             PropertyNames.PROPERTY_STEP,
231cdf0e10cSrcweir             PropertyNames.PROPERTY_TABINDEX,
232cdf0e10cSrcweir             "Tabstop",
233cdf0e10cSrcweir             PropertyNames.PROPERTY_WIDTH
234cdf0e10cSrcweir         };
235cdf0e10cSrcweir 
236cdf0e10cSrcweir         lblImageText = dialog.insertLabel(name + "_imageText", pNames1, new Object[]
237cdf0e10cSrcweir                 {
238cdf0e10cSrcweir                     new Integer(imageTextHeight),
239cdf0e10cSrcweir                     PropertyNames.EMPTY_STRING,
240cdf0e10cSrcweir                     new Integer(pos.Width + 1),
241cdf0e10cSrcweir                     new Integer(pos.Height + (imageSize.Height + gap.Height) * rows + gap.Height),
242cdf0e10cSrcweir                     step,
243cdf0e10cSrcweir                     new Short((short) 0),
244cdf0e10cSrcweir                     Boolean.FALSE,
245cdf0e10cSrcweir                     new Integer(cols * (imageSize.Width + gap.Width) + gap.Width - 2)
246cdf0e10cSrcweir                 });
247cdf0e10cSrcweir 
248cdf0e10cSrcweir 
249cdf0e10cSrcweir         if (showButtons)
250cdf0e10cSrcweir         {
251cdf0e10cSrcweir             final Integer btnSize = 14;
252cdf0e10cSrcweir 
253cdf0e10cSrcweir             btnBack = dialog.insertButton(name + "_btnBack", "prevPage", this, pNames1, new Object[]
254cdf0e10cSrcweir                     {
255cdf0e10cSrcweir                         btnSize,
256cdf0e10cSrcweir                         HelpIds.getHelpIdString(helpURL++),
257cdf0e10cSrcweir                         new Integer(pos.Width),
258cdf0e10cSrcweir                         new Integer(pos.Height + (imageSize.Height + gap.Height) * rows + gap.Height + imageTextHeight + 1),
259cdf0e10cSrcweir                         step,
260cdf0e10cSrcweir                         new Short((short) (tabIndex + 1)),
261cdf0e10cSrcweir                         Boolean.TRUE,
262cdf0e10cSrcweir                         btnSize
263cdf0e10cSrcweir                     });
264cdf0e10cSrcweir 
265cdf0e10cSrcweir             btnNext = dialog.insertButton(name + "_btnNext", "nextPage", this, pNames1, new Object[]
266cdf0e10cSrcweir                     {
267cdf0e10cSrcweir                         btnSize,
268cdf0e10cSrcweir                         HelpIds.getHelpIdString(helpURL++),
269cdf0e10cSrcweir                         new Integer(pos.Width + (imageSize.Width + gap.Width) * cols + gap.Width - btnSize.intValue() + 1),
270cdf0e10cSrcweir                         new Integer(pos.Height + (imageSize.Height + gap.Height) * rows + gap.Height + imageTextHeight + 1),
271cdf0e10cSrcweir                         step,
272cdf0e10cSrcweir                         new Short((short) (tabIndex + 2)),
273cdf0e10cSrcweir                         Boolean.TRUE,
274cdf0e10cSrcweir                         btnSize
275cdf0e10cSrcweir                     });
276cdf0e10cSrcweir 
277cdf0e10cSrcweir             lblCounter = dialog.insertLabel(name + "_lblCounter", pNames1, new Object[]
278cdf0e10cSrcweir                     {
279cdf0e10cSrcweir                         new Integer(LINE_HEIGHT),
280cdf0e10cSrcweir                         PropertyNames.EMPTY_STRING,
281cdf0e10cSrcweir                         new Integer(pos.Width + btnSize.intValue() + 1),
282cdf0e10cSrcweir                         new Integer(pos.Height + (imageSize.Height + gap.Height) * rows + gap.Height + imageTextHeight + ((btnSize.intValue() - LINE_HEIGHT) / 2)),
283cdf0e10cSrcweir                         step,
284cdf0e10cSrcweir                         new Short((short) 0),
285cdf0e10cSrcweir                         Boolean.FALSE,
286cdf0e10cSrcweir                         new Integer(cols * (imageSize.Width + gap.Width) + gap.Width - 2 * btnSize.intValue() - 1)
287cdf0e10cSrcweir                     });
288cdf0e10cSrcweir 
289cdf0e10cSrcweir             Helper.setUnoPropertyValue(getModel(lblCounter), PropertyNames.PROPERTY_ALIGN, new Short((short) 1));
290cdf0e10cSrcweir             Helper.setUnoPropertyValue(getModel(btnBack), PropertyNames.PROPERTY_LABEL, "<");
291cdf0e10cSrcweir             Helper.setUnoPropertyValue(getModel(btnNext), PropertyNames.PROPERTY_LABEL, ">");
292cdf0e10cSrcweir 
293cdf0e10cSrcweir 
294cdf0e10cSrcweir         }
295cdf0e10cSrcweir 
296cdf0e10cSrcweir         imageKeyListener = new ImageKeyListener();
297cdf0e10cSrcweir         m_tabIndex = new Short((short) tabIndex);
298cdf0e10cSrcweir 
299cdf0e10cSrcweir         m_aImages = new XControl[rows * cols];
300cdf0e10cSrcweir 
301cdf0e10cSrcweir         try
302cdf0e10cSrcweir         {
303cdf0e10cSrcweir             //METHOD_MOUSE_ENTER_IMAGE = new MethodInvocation("mouseEnterImage",this,Object.class);
304cdf0e10cSrcweir             //METHOD_MOUSE_EXIT_IMAGE = new MethodInvocation("mouseExitImage",this,Object.class);
305cdf0e10cSrcweir             METHOD_MOUSE_PRESSED = new MethodInvocation("mousePressed", this, Object.class);
306cdf0e10cSrcweir         }
307cdf0e10cSrcweir         catch (NoSuchMethodException e)
308cdf0e10cSrcweir         {
309cdf0e10cSrcweir             e.printStackTrace();
310cdf0e10cSrcweir         }
311cdf0e10cSrcweir 
312cdf0e10cSrcweir         m_imageHeight = new Integer(imageSize.Height);
313cdf0e10cSrcweir         m_imageWidth = new Integer(imageSize.Width);
314cdf0e10cSrcweir 
315cdf0e10cSrcweir         for (int r = 0; r < rows; r++)
316cdf0e10cSrcweir         {
317cdf0e10cSrcweir             for (int c = 0; c < cols; c++)
318cdf0e10cSrcweir             {
319cdf0e10cSrcweir                 m_aImages[r * cols + c] = createImage(dialog, r, c);
320cdf0e10cSrcweir             }
321cdf0e10cSrcweir         }
322cdf0e10cSrcweir         refreshImages();
323cdf0e10cSrcweir 
324cdf0e10cSrcweir         listModel.addListDataListener(this);
325cdf0e10cSrcweir 
326cdf0e10cSrcweir     }
327cdf0e10cSrcweir     private Integer m_imageHeight,  m_imageWidth;
328cdf0e10cSrcweir     private final static String[] IMAGE_PROPS = new String[]
329cdf0e10cSrcweir     {
330cdf0e10cSrcweir         PropertyNames.PROPERTY_BORDER,
331cdf0e10cSrcweir         "BackgroundColor",
332cdf0e10cSrcweir         PropertyNames.PROPERTY_HEIGHT,
333cdf0e10cSrcweir         PropertyNames.PROPERTY_HELPURL,
334cdf0e10cSrcweir         PropertyNames.PROPERTY_POSITION_X,
335cdf0e10cSrcweir         PropertyNames.PROPERTY_POSITION_Y,
336cdf0e10cSrcweir         "ScaleImage",
337cdf0e10cSrcweir         PropertyNames.PROPERTY_STEP,
338cdf0e10cSrcweir         PropertyNames.PROPERTY_TABINDEX,
339cdf0e10cSrcweir         "Tabstop",
340cdf0e10cSrcweir         PropertyNames.PROPERTY_WIDTH
341cdf0e10cSrcweir     };
342cdf0e10cSrcweir     //used for optimization
343cdf0e10cSrcweir     private Short m_tabIndex;
344cdf0e10cSrcweir 
createImage(UnoDialog2 dialog, int _row, int _col)345cdf0e10cSrcweir     private XControl createImage(UnoDialog2 dialog, int _row, int _col)
346cdf0e10cSrcweir                 {
347cdf0e10cSrcweir         String imageName = name + "_image" + (_row * cols + _col);
348cdf0e10cSrcweir         XControl image = dialog.insertImage(imageName,
349cdf0e10cSrcweir                 IMAGE_PROPS,
350cdf0e10cSrcweir                 new Object[]
351cdf0e10cSrcweir                 {
352cdf0e10cSrcweir                     NO_BORDER,
353cdf0e10cSrcweir                     BACKGROUND_COLOR,
354cdf0e10cSrcweir                     m_imageHeight,
355cdf0e10cSrcweir                     HelpIds.getHelpIdString(helpURL++),
356cdf0e10cSrcweir                     new Integer(getImagePosX(_col)),
357cdf0e10cSrcweir                     new Integer(getImagePosY(_row)),
358cdf0e10cSrcweir                     scaleImages,
359cdf0e10cSrcweir                     step,
360cdf0e10cSrcweir                     m_tabIndex,
361cdf0e10cSrcweir                     Boolean.FALSE,
362cdf0e10cSrcweir                     m_imageWidth
363cdf0e10cSrcweir                 });
364cdf0e10cSrcweir 
365cdf0e10cSrcweir         XWindow win = UnoRuntime.queryInterface(XWindow.class, image);
366cdf0e10cSrcweir         win.addMouseListener(uiEventListener);
367cdf0e10cSrcweir         win.addKeyListener(imageKeyListener);
368cdf0e10cSrcweir         //uiEventListener.add(imageName,EventNames.EVENT_MOUSE_ENTERED,METHOD_MOUSE_ENTER_IMAGE);
369cdf0e10cSrcweir         //uiEventListener.add(imageName,EventNames.EVENT_MOUSE_EXITED,METHOD_MOUSE_EXIT_IMAGE);
370cdf0e10cSrcweir         uiEventListener.add(imageName, EventNames.EVENT_MOUSE_PRESSED, METHOD_MOUSE_PRESSED);
371cdf0e10cSrcweir 
372cdf0e10cSrcweir         return image;
373cdf0e10cSrcweir     }
374cdf0e10cSrcweir 
getImagePosX(int col)375cdf0e10cSrcweir     private int getImagePosX(int col)
376cdf0e10cSrcweir     {
377cdf0e10cSrcweir         return pos.Width + col * (imageSize.Width + gap.Width) + gap.Width;
378cdf0e10cSrcweir     }
379cdf0e10cSrcweir 
getImagePosY(int row)380cdf0e10cSrcweir     private int getImagePosY(int row)
381cdf0e10cSrcweir     {
382cdf0e10cSrcweir         return pos.Height + row * (imageSize.Height + gap.Height) + gap.Height;
383cdf0e10cSrcweir     }
384cdf0e10cSrcweir 
refreshImages()385cdf0e10cSrcweir     private void refreshImages()
386cdf0e10cSrcweir     {
387cdf0e10cSrcweir         if (showButtons)
388cdf0e10cSrcweir         {
389cdf0e10cSrcweir             refreshCounterText();
390cdf0e10cSrcweir         }
391cdf0e10cSrcweir         hideSelection();
392cdf0e10cSrcweir         if (refreshOverNull)
393cdf0e10cSrcweir         {
394cdf0e10cSrcweir             for (int i = 0; i < m_aImages.length; i++)
395cdf0e10cSrcweir             {
396cdf0e10cSrcweir                 setVisible(m_aImages[i], false);
397cdf0e10cSrcweir             }
398cdf0e10cSrcweir         }
399cdf0e10cSrcweir         boolean focusable = true;
400cdf0e10cSrcweir         for (int i = 0; i < m_aImages.length; i++)
401cdf0e10cSrcweir         {
402cdf0e10cSrcweir             Object[] oResources = renderer.getImageUrls(getObjectFor(i));
403cdf0e10cSrcweir             if (oResources != null)
404cdf0e10cSrcweir             {
405cdf0e10cSrcweir                 if (oResources.length == 1)
406cdf0e10cSrcweir                 {
407cdf0e10cSrcweir                     Helper.setUnoPropertyValue(m_aImages[i].getModel(), PropertyNames.PROPERTY_IMAGEURL, oResources[0]);
408cdf0e10cSrcweir                 }
409cdf0e10cSrcweir                 else if (oResources.length == 2)
410cdf0e10cSrcweir                 {
411cdf0e10cSrcweir                     oUnoDialog.getPeerConfiguration().setImageUrl(m_aImages[i].getModel(), oResources[0], oResources[1]);
412cdf0e10cSrcweir                 }
413cdf0e10cSrcweir                 Helper.setUnoPropertyValue(m_aImages[i].getModel(), "Tabstop", focusable ? Boolean.TRUE : Boolean.FALSE);
414cdf0e10cSrcweir                 if (refreshOverNull)
415cdf0e10cSrcweir                 {
416cdf0e10cSrcweir                     setVisible(m_aImages[i], true);
417cdf0e10cSrcweir                 }
418cdf0e10cSrcweir                 focusable = false;
419cdf0e10cSrcweir             }
420cdf0e10cSrcweir         }
421cdf0e10cSrcweir         refreshSelection();
422cdf0e10cSrcweir     }
423cdf0e10cSrcweir 
refreshCounterText()424cdf0e10cSrcweir     private void refreshCounterText()
425cdf0e10cSrcweir     {
426cdf0e10cSrcweir         Helper.setUnoPropertyValue(getModel(lblCounter), PropertyNames.PROPERTY_LABEL, counterRenderer.render(new Counter(pageStart + 1, pageEnd(), listModel.getSize())));
427cdf0e10cSrcweir     }
428cdf0e10cSrcweir 
pageEnd()429cdf0e10cSrcweir     private int pageEnd()
430cdf0e10cSrcweir     {
431cdf0e10cSrcweir         int i = pageStart + cols * rows;
432cdf0e10cSrcweir         if (i > listModel.getSize() - 1)
433cdf0e10cSrcweir         {
434cdf0e10cSrcweir             return listModel.getSize();
435cdf0e10cSrcweir         }
436cdf0e10cSrcweir         else
437cdf0e10cSrcweir         {
438cdf0e10cSrcweir             return i;
439cdf0e10cSrcweir         }
440cdf0e10cSrcweir     }
441cdf0e10cSrcweir 
refreshSelection()442cdf0e10cSrcweir     private void refreshSelection()
443cdf0e10cSrcweir     {
444cdf0e10cSrcweir         if (selected < pageStart || selected >= (pageStart + rows * cols))
445cdf0e10cSrcweir         {
446cdf0e10cSrcweir             hideSelection();
447cdf0e10cSrcweir         }
448cdf0e10cSrcweir         else
449cdf0e10cSrcweir         {
450cdf0e10cSrcweir             moveSelection(getImageIndexFor(selected));
451cdf0e10cSrcweir         }
452cdf0e10cSrcweir     }
453cdf0e10cSrcweir 
hideSelection()454cdf0e10cSrcweir     private void hideSelection()
455cdf0e10cSrcweir     {
456cdf0e10cSrcweir         Helper.setUnoPropertyValue(getModel(grbxSelectedImage), PropertyNames.PROPERTY_STEP, HIDE_PAGE);
457cdf0e10cSrcweir         setVisible(grbxSelectedImage, false);
458cdf0e10cSrcweir     }
459cdf0e10cSrcweir     private final static String[] MOVE_SELECTION = new String[]
460cdf0e10cSrcweir     {
461cdf0e10cSrcweir         PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP
462cdf0e10cSrcweir     };
463cdf0e10cSrcweir     private Object[] MOVE_SELECTION_VALS = new Object[3];
464cdf0e10cSrcweir     /** Utility field holding list of ItemListeners. */
465cdf0e10cSrcweir     private transient java.util.ArrayList itemListenerList;
466cdf0e10cSrcweir 
moveSelection(int image)467cdf0e10cSrcweir     private void moveSelection(int image)
468cdf0e10cSrcweir     {
469cdf0e10cSrcweir         //System.out.println(image);
470cdf0e10cSrcweir         setVisible(grbxSelectedImage, false);
471cdf0e10cSrcweir 
472cdf0e10cSrcweir         int row = image / cols;
473cdf0e10cSrcweir         int col = rowSelect ? 0 : image - (row * cols);
474cdf0e10cSrcweir 
475cdf0e10cSrcweir         MOVE_SELECTION_VALS[0] = new Integer(getImagePosX(col) - selectionGap.Width);
476cdf0e10cSrcweir         MOVE_SELECTION_VALS[1] = new Integer(getImagePosY(row) - selectionGap.Height);
477cdf0e10cSrcweir 
478cdf0e10cSrcweir         Helper.setUnoPropertyValues(getModel(grbxSelectedImage), MOVE_SELECTION, MOVE_SELECTION_VALS);
479cdf0e10cSrcweir 
480cdf0e10cSrcweir         if (((Number) Helper.getUnoPropertyValue(dialogModel, PropertyNames.PROPERTY_STEP)).shortValue() == step.shortValue())
481cdf0e10cSrcweir         {
482cdf0e10cSrcweir             setVisible(grbxSelectedImage, true);        //now focus...
483cdf0e10cSrcweir         }
484cdf0e10cSrcweir         for (int i = 0; i < m_aImages.length; i++)
485cdf0e10cSrcweir         {
486cdf0e10cSrcweir             if (i != image)
487cdf0e10cSrcweir             {
488cdf0e10cSrcweir                 defocus(i);
489cdf0e10cSrcweir             }
490cdf0e10cSrcweir             else
491cdf0e10cSrcweir             {
492cdf0e10cSrcweir                 Helper.setUnoPropertyValue(m_aImages[image].getModel(), "Tabstop", Boolean.TRUE);
493cdf0e10cSrcweir             }
494cdf0e10cSrcweir         }
495cdf0e10cSrcweir     }
496cdf0e10cSrcweir 
setVisible(Object control, boolean visible)497cdf0e10cSrcweir     private void setVisible(Object control, boolean visible)
498cdf0e10cSrcweir     {
499cdf0e10cSrcweir         UnoRuntime.queryInterface(XWindow.class, control).setVisible(visible);
500cdf0e10cSrcweir     }
501cdf0e10cSrcweir 
502cdf0e10cSrcweir     /**
503cdf0e10cSrcweir      *
504cdf0e10cSrcweir      * @param i
505cdf0e10cSrcweir      * @return the Object in the list model corresponding to the given image index.
506cdf0e10cSrcweir      */
getObjectFor(int i)507cdf0e10cSrcweir     private Object getObjectFor(int i)
508cdf0e10cSrcweir     {
509cdf0e10cSrcweir         int ii = getIndexFor(i);
510cdf0e10cSrcweir         if (listModel.getSize() <= ii)
511cdf0e10cSrcweir         {
512cdf0e10cSrcweir             return null;
513cdf0e10cSrcweir         }
514cdf0e10cSrcweir         else
515cdf0e10cSrcweir         {
516cdf0e10cSrcweir             return listModel.getElementAt(ii);
517cdf0e10cSrcweir         }
518cdf0e10cSrcweir     }
519cdf0e10cSrcweir 
520cdf0e10cSrcweir     /**
521cdf0e10cSrcweir      *
522cdf0e10cSrcweir      * @param i
523cdf0e10cSrcweir      * @return the index in the listModel for the given image index.
524cdf0e10cSrcweir      */
getIndexFor(int i)525cdf0e10cSrcweir     private int getIndexFor(int i)
526cdf0e10cSrcweir     {
527cdf0e10cSrcweir         return pageStart + i;
528cdf0e10cSrcweir     }
529cdf0e10cSrcweir 
getImageIndexFor(int i)530cdf0e10cSrcweir     private int getImageIndexFor(int i)
531cdf0e10cSrcweir     {
532cdf0e10cSrcweir         return i - pageStart;
533cdf0e10cSrcweir     }
534cdf0e10cSrcweir 
contentsChanged(ListDataEvent event)535cdf0e10cSrcweir     public void contentsChanged(ListDataEvent event)
536cdf0e10cSrcweir     {
537cdf0e10cSrcweir         /*//if the content that was changed is in the displayed range, refresh...
538cdf0e10cSrcweir         if (  (event.getIndex1() <  getIndexFor(0)) // range is before...
539cdf0e10cSrcweir         || event.getIndex0() > getIndexFor( cols*rows - 1)) ; //do nothing
540cdf0e10cSrcweir         else
541cdf0e10cSrcweir         refreshImages();
542cdf0e10cSrcweir          */        //selected = 0;
543cdf0e10cSrcweir         //pageStart = 0;
544cdf0e10cSrcweir         //if (event.refreshImages();
545cdf0e10cSrcweir     }
546cdf0e10cSrcweir 
intervalAdded(ListDataEvent event)547cdf0e10cSrcweir     public void intervalAdded(ListDataEvent event)
548cdf0e10cSrcweir     {
549cdf0e10cSrcweir         if (event.getIndex0() <= selected)
550cdf0e10cSrcweir         {
551cdf0e10cSrcweir             if (event.getIndex1() <= selected)
552cdf0e10cSrcweir             {
553cdf0e10cSrcweir                 selected += event.getIndex1() - event.getIndex0() + 1;
554cdf0e10cSrcweir             }
555cdf0e10cSrcweir         }
556cdf0e10cSrcweir         if (event.getIndex0() < pageStart || event.getIndex1() < (pageStart + getRows() + getCols()))
557cdf0e10cSrcweir         {
558cdf0e10cSrcweir             refreshImages();
559cdf0e10cSrcweir         }
560cdf0e10cSrcweir     }
561cdf0e10cSrcweir 
intervalRemoved(ListDataEvent event)562cdf0e10cSrcweir     public void intervalRemoved(ListDataEvent event)
563cdf0e10cSrcweir     {
564cdf0e10cSrcweir         //contentsChanged(event);
565cdf0e10cSrcweir     }
566cdf0e10cSrcweir 
567cdf0e10cSrcweir     /** Registers ItemListener to receive events.
568cdf0e10cSrcweir      * @param listener The listener to register.
569cdf0e10cSrcweir      *
570cdf0e10cSrcweir      */
addItemListener(XItemListener listener)571cdf0e10cSrcweir     public synchronized void addItemListener(XItemListener listener)
572cdf0e10cSrcweir     {
573cdf0e10cSrcweir         if (itemListenerList == null)
574cdf0e10cSrcweir         {
575cdf0e10cSrcweir             itemListenerList = new java.util.ArrayList();
576cdf0e10cSrcweir         }
577cdf0e10cSrcweir         itemListenerList.add(listener);
578cdf0e10cSrcweir     }
579cdf0e10cSrcweir 
580cdf0e10cSrcweir     /** Removes ItemListener from the list of listeners.
581cdf0e10cSrcweir      * @param listener The listener to remove.
582cdf0e10cSrcweir      *
583cdf0e10cSrcweir      */
removeItemListener(XItemListener listener)584cdf0e10cSrcweir     public synchronized void removeItemListener(XItemListener listener)
585cdf0e10cSrcweir     {
586cdf0e10cSrcweir         if (itemListenerList != null)
587cdf0e10cSrcweir         {
588cdf0e10cSrcweir             itemListenerList.remove(listener);
589cdf0e10cSrcweir         }
590cdf0e10cSrcweir     }
591cdf0e10cSrcweir 
592cdf0e10cSrcweir     /** Notifies all registered listeners about the event.
593cdf0e10cSrcweir      *
594cdf0e10cSrcweir      * @param event The event to be fired
595cdf0e10cSrcweir      *
596cdf0e10cSrcweir      */
fireItemSelected()597cdf0e10cSrcweir     private void fireItemSelected()
598cdf0e10cSrcweir     {
599cdf0e10cSrcweir //      java.awt.event.ItemEvent event = new java.awt.event.ItemEvent(this, 0,
600cdf0e10cSrcweir //          getSelectedObject(), java.awt.event.ItemEvent.SELECTED);
601cdf0e10cSrcweir         java.util.ArrayList list;
602cdf0e10cSrcweir         synchronized(this)
603cdf0e10cSrcweir         {
604cdf0e10cSrcweir             if (itemListenerList == null)
605cdf0e10cSrcweir             {
606cdf0e10cSrcweir                 return;
607cdf0e10cSrcweir             }
608cdf0e10cSrcweir             list = (java.util.ArrayList) itemListenerList.clone();
609cdf0e10cSrcweir         }
610cdf0e10cSrcweir         for (int i = 0; i < list.size(); i++)
611cdf0e10cSrcweir         {
612cdf0e10cSrcweir             ((com.sun.star.awt.XItemListener) list.get(i)).itemStateChanged(null);
613cdf0e10cSrcweir         }
614cdf0e10cSrcweir     }
615cdf0e10cSrcweir 
616cdf0e10cSrcweir     /**
617cdf0e10cSrcweir      * @return
618cdf0e10cSrcweir      */
getCols()619cdf0e10cSrcweir     public int getCols()
620cdf0e10cSrcweir     {
621cdf0e10cSrcweir         return cols;
622cdf0e10cSrcweir     }
623cdf0e10cSrcweir 
624cdf0e10cSrcweir     /**
625cdf0e10cSrcweir      * @return
626cdf0e10cSrcweir      */
getGap()627cdf0e10cSrcweir     public Size getGap()
628cdf0e10cSrcweir     {
629cdf0e10cSrcweir         return gap;
630cdf0e10cSrcweir     }
631cdf0e10cSrcweir 
632cdf0e10cSrcweir     /**
633cdf0e10cSrcweir      * @return
634cdf0e10cSrcweir      */
getListModel()635cdf0e10cSrcweir     public ListModel getListModel()
636cdf0e10cSrcweir     {
637cdf0e10cSrcweir         return listModel;
638cdf0e10cSrcweir     }
639cdf0e10cSrcweir 
640cdf0e10cSrcweir     /**
641cdf0e10cSrcweir      * @return
642cdf0e10cSrcweir      */
getStep()643cdf0e10cSrcweir     public Short getStep()
644cdf0e10cSrcweir     {
645cdf0e10cSrcweir         return step;
646cdf0e10cSrcweir     }
647cdf0e10cSrcweir 
648cdf0e10cSrcweir     /**
649cdf0e10cSrcweir      * @return
650cdf0e10cSrcweir      */
getPageStart()651cdf0e10cSrcweir     public int getPageStart()
652cdf0e10cSrcweir     {
653cdf0e10cSrcweir         return pageStart;
654cdf0e10cSrcweir     }
655cdf0e10cSrcweir 
656cdf0e10cSrcweir     /**
657cdf0e10cSrcweir      * @return
658cdf0e10cSrcweir      */
getPos()659cdf0e10cSrcweir     public Size getPos()
660cdf0e10cSrcweir     {
661cdf0e10cSrcweir         return pos;
662cdf0e10cSrcweir     }
663cdf0e10cSrcweir 
664cdf0e10cSrcweir     /**
665cdf0e10cSrcweir      * @return
666cdf0e10cSrcweir      */
getRenderer()667cdf0e10cSrcweir     public IImageRenderer getRenderer()
668cdf0e10cSrcweir     {
669cdf0e10cSrcweir         return renderer;
670cdf0e10cSrcweir     }
671cdf0e10cSrcweir 
672cdf0e10cSrcweir     /**
673cdf0e10cSrcweir      * @return
674cdf0e10cSrcweir      */
getRows()675cdf0e10cSrcweir     public int getRows()
676cdf0e10cSrcweir     {
677cdf0e10cSrcweir         return rows;
678cdf0e10cSrcweir     }
679cdf0e10cSrcweir 
680cdf0e10cSrcweir     /**
681cdf0e10cSrcweir      * @return
682cdf0e10cSrcweir      */
getSelected()683cdf0e10cSrcweir     public int getSelected()
684cdf0e10cSrcweir     {
685cdf0e10cSrcweir         return selected;
686cdf0e10cSrcweir     }
687cdf0e10cSrcweir 
688cdf0e10cSrcweir     /**
689cdf0e10cSrcweir      * @return
690cdf0e10cSrcweir      */
getSelectionGap()691cdf0e10cSrcweir     public Size getSelectionGap()
692cdf0e10cSrcweir     {
693cdf0e10cSrcweir         return selectionGap;
694cdf0e10cSrcweir     }
695cdf0e10cSrcweir 
696cdf0e10cSrcweir     /**
697cdf0e10cSrcweir      * @return
698cdf0e10cSrcweir      */
isShowButtons()699cdf0e10cSrcweir     public boolean isShowButtons()
700cdf0e10cSrcweir     {
701cdf0e10cSrcweir         return showButtons;
702cdf0e10cSrcweir     }
703cdf0e10cSrcweir 
704cdf0e10cSrcweir     /**
705cdf0e10cSrcweir      * @param i
706cdf0e10cSrcweir      */
setCols(int i)707cdf0e10cSrcweir     public void setCols(int i)
708cdf0e10cSrcweir     {
709cdf0e10cSrcweir         cols = i;
710cdf0e10cSrcweir     }
711cdf0e10cSrcweir 
712cdf0e10cSrcweir     /**
713cdf0e10cSrcweir      * @param size
714cdf0e10cSrcweir      */
setGap(Size size)715cdf0e10cSrcweir     public void setGap(Size size)
716cdf0e10cSrcweir     {
717cdf0e10cSrcweir         gap = size;
718cdf0e10cSrcweir     }
719cdf0e10cSrcweir 
720cdf0e10cSrcweir     /**
721cdf0e10cSrcweir      * @param model
722cdf0e10cSrcweir      */
setListModel(ListModel model)723cdf0e10cSrcweir     public void setListModel(ListModel model)
724cdf0e10cSrcweir     {
725cdf0e10cSrcweir         listModel = model;
726cdf0e10cSrcweir     }
727cdf0e10cSrcweir 
728cdf0e10cSrcweir     /**
729cdf0e10cSrcweir      * @param short1
730cdf0e10cSrcweir      */
setStep(Short short1)731cdf0e10cSrcweir     public void setStep(Short short1)
732cdf0e10cSrcweir     {
733cdf0e10cSrcweir         step = short1;
734cdf0e10cSrcweir     }
735cdf0e10cSrcweir 
736cdf0e10cSrcweir     /**
737cdf0e10cSrcweir      * @param i
738cdf0e10cSrcweir      */
setPageStart(int i)739cdf0e10cSrcweir     public void setPageStart(int i)
740cdf0e10cSrcweir     {
741cdf0e10cSrcweir         if (i == pageStart)
742cdf0e10cSrcweir         {
743cdf0e10cSrcweir             return;
744cdf0e10cSrcweir         }
745cdf0e10cSrcweir         pageStart = i;
746cdf0e10cSrcweir         enableButtons();
747cdf0e10cSrcweir         refreshImages();
748cdf0e10cSrcweir     }
749cdf0e10cSrcweir 
750cdf0e10cSrcweir     /**
751cdf0e10cSrcweir      * @param size
752cdf0e10cSrcweir      */
setPos(Size size)753cdf0e10cSrcweir     public void setPos(Size size)
754cdf0e10cSrcweir     {
755cdf0e10cSrcweir         pos = size;
756cdf0e10cSrcweir     }
757cdf0e10cSrcweir 
758cdf0e10cSrcweir     /**
759cdf0e10cSrcweir      * @param renderer
760cdf0e10cSrcweir      */
setRenderer(IImageRenderer renderer)761cdf0e10cSrcweir     public void setRenderer(IImageRenderer renderer)
762cdf0e10cSrcweir     {
763cdf0e10cSrcweir         this.renderer = renderer;
764cdf0e10cSrcweir     }
765cdf0e10cSrcweir 
766cdf0e10cSrcweir     /**
767cdf0e10cSrcweir      * @param i
768cdf0e10cSrcweir      */
setRows(int i)769cdf0e10cSrcweir     public void setRows(int i)
770cdf0e10cSrcweir     {
771cdf0e10cSrcweir         rows = i;
772cdf0e10cSrcweir     }
773cdf0e10cSrcweir 
774cdf0e10cSrcweir     /**
775cdf0e10cSrcweir      * @param i
776cdf0e10cSrcweir      */
setSelected(int i)777cdf0e10cSrcweir     public void setSelected(int i)
778cdf0e10cSrcweir     {
779cdf0e10cSrcweir         if (rowSelect && (i >= 0))
780cdf0e10cSrcweir         {
781cdf0e10cSrcweir             i = (i / cols) * cols;
782cdf0e10cSrcweir         }
783cdf0e10cSrcweir         if (selected == i)
784cdf0e10cSrcweir         {
785cdf0e10cSrcweir             return;
786cdf0e10cSrcweir         }
787cdf0e10cSrcweir         selected = i;
788cdf0e10cSrcweir         refreshImageText();
789cdf0e10cSrcweir         refreshSelection();
790cdf0e10cSrcweir         fireItemSelected();
791cdf0e10cSrcweir     }
792cdf0e10cSrcweir 
setSelected(Object object)793cdf0e10cSrcweir     public void setSelected(Object object)
794cdf0e10cSrcweir     {
795cdf0e10cSrcweir         if (object == null)
796cdf0e10cSrcweir         {
797cdf0e10cSrcweir             setSelected(-1);
798cdf0e10cSrcweir         }
799cdf0e10cSrcweir         else
800cdf0e10cSrcweir         {
801cdf0e10cSrcweir             for (int i = 0; i < getListModel().getSize(); i++)
802cdf0e10cSrcweir             {
803cdf0e10cSrcweir                 if (getListModel().getElementAt(i).equals(object))
804cdf0e10cSrcweir                 {
805cdf0e10cSrcweir                     setSelected(i);
806cdf0e10cSrcweir                     return;
807cdf0e10cSrcweir                 }
808cdf0e10cSrcweir             }
809cdf0e10cSrcweir         }
810cdf0e10cSrcweir         setSelected(-1);
811cdf0e10cSrcweir 
812cdf0e10cSrcweir     }
813cdf0e10cSrcweir 
refreshImageText()814cdf0e10cSrcweir     private void refreshImageText()
815cdf0e10cSrcweir     {
816cdf0e10cSrcweir         Object item = selected >= 0 ? getListModel().getElementAt(selected) : null;
817cdf0e10cSrcweir         Helper.setUnoPropertyValue(getModel(lblImageText), PropertyNames.PROPERTY_LABEL, PropertyNames.SPACE + renderer.render(item));
818cdf0e10cSrcweir     }
819cdf0e10cSrcweir 
820cdf0e10cSrcweir     /**
821cdf0e10cSrcweir      * @param size
822cdf0e10cSrcweir      */
setSelectionGap(Size size)823cdf0e10cSrcweir     public void setSelectionGap(Size size)
824cdf0e10cSrcweir     {
825cdf0e10cSrcweir         selectionGap = size;
826cdf0e10cSrcweir     }
827cdf0e10cSrcweir 
828cdf0e10cSrcweir     /**
829cdf0e10cSrcweir      * @param b
830cdf0e10cSrcweir      */
setShowButtons(boolean b)831cdf0e10cSrcweir     public void setShowButtons(boolean b)
832cdf0e10cSrcweir     {
833cdf0e10cSrcweir         showButtons = b;
834cdf0e10cSrcweir     }
835cdf0e10cSrcweir 
nextPage()836cdf0e10cSrcweir     public void nextPage()
837cdf0e10cSrcweir     {
838cdf0e10cSrcweir         if (pageStart < getListModel().getSize() - rows * cols)
839cdf0e10cSrcweir         {
840cdf0e10cSrcweir             setPageStart(pageStart + rows * cols);
841cdf0e10cSrcweir         }
842cdf0e10cSrcweir     }
843cdf0e10cSrcweir 
prevPage()844cdf0e10cSrcweir     public void prevPage()
845cdf0e10cSrcweir     {
846cdf0e10cSrcweir         if (pageStart == 0)
847cdf0e10cSrcweir         {
848cdf0e10cSrcweir             return;
849cdf0e10cSrcweir         }
850cdf0e10cSrcweir         int i = pageStart - rows * cols;
851cdf0e10cSrcweir         if (i < 0)
852cdf0e10cSrcweir         {
853cdf0e10cSrcweir             i = 0;
854cdf0e10cSrcweir         }
855cdf0e10cSrcweir         setPageStart(i);
856cdf0e10cSrcweir     }
857cdf0e10cSrcweir 
enableButtons()858cdf0e10cSrcweir     private void enableButtons()
859cdf0e10cSrcweir     {
860cdf0e10cSrcweir         enable(btnNext, Boolean.valueOf(pageStart + rows * cols < listModel.getSize()));
861cdf0e10cSrcweir         enable(btnBack, Boolean.valueOf(pageStart > 0));
862cdf0e10cSrcweir     }
863cdf0e10cSrcweir 
enable(Object control, Boolean enable)864cdf0e10cSrcweir     private void enable(Object control, Boolean enable)
865cdf0e10cSrcweir     {
866cdf0e10cSrcweir         Helper.setUnoPropertyValue(getModel(control), PropertyNames.PROPERTY_ENABLED, enable);
867cdf0e10cSrcweir     }
868cdf0e10cSrcweir 
getModel(Object control)869cdf0e10cSrcweir     private Object getModel(Object control)
870cdf0e10cSrcweir     {
871cdf0e10cSrcweir         return UnoRuntime.queryInterface(XControl.class, control).getModel();
872cdf0e10cSrcweir     }
873cdf0e10cSrcweir 
874cdf0e10cSrcweir     /*
875cdf0e10cSrcweir     public void mouseEnterImage(Object event) {
876cdf0e10cSrcweir     System.out.println("mouse enter");
877cdf0e10cSrcweir     int i = getImageFromEvent(event);
878cdf0e10cSrcweir     //TODO what is when the image does not display an image?
879cdf0e10cSrcweir     if (getIndexFor(i) != selected)
880cdf0e10cSrcweir     setBorder(m_aImages[i],imageBorderMO);
881cdf0e10cSrcweir     }
882cdf0e10cSrcweir 
883cdf0e10cSrcweir     public void mouseExitImage(Object event) {
884cdf0e10cSrcweir     //System.out.println("mouse exit");
885cdf0e10cSrcweir     int i = getImageFromEvent(event);
886cdf0e10cSrcweir     //TODO what is when the image does not display an image?
887cdf0e10cSrcweir     if (getIndexFor(i) != selected)
888cdf0e10cSrcweir     setBorder(m_aImages[i],imageBorder);
889cdf0e10cSrcweir     }
890cdf0e10cSrcweir      */
setBorder(Object control, Short border)891cdf0e10cSrcweir     private void setBorder(Object control, Short border)
892cdf0e10cSrcweir     {
893cdf0e10cSrcweir         Helper.setUnoPropertyValue(getModel(control), PropertyNames.PROPERTY_BORDER, border);
894cdf0e10cSrcweir     //XWindowPeer peer = ((XControl)UnoRuntime.queryInterface(XControl.class,control)).getPeer();
895cdf0e10cSrcweir     //peer.invalidate(InvalidateStyle.CHILDREN);
896cdf0e10cSrcweir     }
897cdf0e10cSrcweir 
getImageFromEvent(Object event)898cdf0e10cSrcweir     private int getImageFromEvent(Object event)
899cdf0e10cSrcweir     {
900cdf0e10cSrcweir         Object image = ((EventObject) event).Source;
901cdf0e10cSrcweir         String controlName = (String) Helper.getUnoPropertyValue(getModel(image), PropertyNames.PROPERTY_NAME);
902cdf0e10cSrcweir         return Integer.valueOf(controlName.substring(6 + name.length())).intValue();
903cdf0e10cSrcweir 
904cdf0e10cSrcweir     }
905cdf0e10cSrcweir 
mousePressed(Object event)906cdf0e10cSrcweir     public void mousePressed(Object event)
907cdf0e10cSrcweir     {
908cdf0e10cSrcweir         int image = getImageFromEvent(event);
909cdf0e10cSrcweir         int index = getIndexFor(image);
910cdf0e10cSrcweir         if (index < listModel.getSize())
911cdf0e10cSrcweir         {
912cdf0e10cSrcweir             focus(image);
913cdf0e10cSrcweir             setSelected(index);
914cdf0e10cSrcweir         }
915cdf0e10cSrcweir     }
916cdf0e10cSrcweir 
getSelectedObjects()917cdf0e10cSrcweir     public Object[] getSelectedObjects()
918cdf0e10cSrcweir     {
919cdf0e10cSrcweir         return new Object[]
920cdf0e10cSrcweir                 {
921cdf0e10cSrcweir                     getListModel().getElementAt(selected)
922cdf0e10cSrcweir                 };
923cdf0e10cSrcweir     }
924cdf0e10cSrcweir 
925cdf0e10cSrcweir     /**
926cdf0e10cSrcweir      */
927cdf0e10cSrcweir     public static interface IImageRenderer extends IRenderer
928cdf0e10cSrcweir     {
929cdf0e10cSrcweir 
930cdf0e10cSrcweir         /**
931cdf0e10cSrcweir          *
932cdf0e10cSrcweir          * @param listItem
933cdf0e10cSrcweir          * @return two resource ids for an image referenced in the imaglist resourcefile of the
934cdf0e10cSrcweir          * wizards project; The second one of them is designed to be used for High Contrast Mode.
935cdf0e10cSrcweir          */
getImageUrls(Object listItem)936cdf0e10cSrcweir         public Object[] getImageUrls(Object listItem);
937cdf0e10cSrcweir     }
938cdf0e10cSrcweir 
939cdf0e10cSrcweir     private static class SimpleCounterRenderer implements IRenderer
940cdf0e10cSrcweir     {
941cdf0e10cSrcweir 
render(Object counter)942cdf0e10cSrcweir         public String render(Object counter)
943cdf0e10cSrcweir         {
944cdf0e10cSrcweir             return PropertyNames.EMPTY_STRING + ((Counter) counter).start + ".." + ((Counter) counter).end + "/" + ((Counter) counter).max;
945cdf0e10cSrcweir         }
946cdf0e10cSrcweir     }
947cdf0e10cSrcweir 
948cdf0e10cSrcweir     public static class Counter
949cdf0e10cSrcweir     {
950cdf0e10cSrcweir 
951cdf0e10cSrcweir         public int start,  end,  max;
952cdf0e10cSrcweir 
Counter(int start_, int end_, int max_)953cdf0e10cSrcweir         public Counter(int start_, int end_, int max_)
954cdf0e10cSrcweir         {
955cdf0e10cSrcweir             start = start_;
956cdf0e10cSrcweir             end = end_;
957cdf0e10cSrcweir             max = max_;
958cdf0e10cSrcweir         }
959cdf0e10cSrcweir     }
960cdf0e10cSrcweir 
getSelectedObject()961cdf0e10cSrcweir     public Object getSelectedObject()
962cdf0e10cSrcweir     {
963cdf0e10cSrcweir         return selected >= 0 ? getListModel().getElementAt(selected) : null;
964cdf0e10cSrcweir     }
965cdf0e10cSrcweir 
showSelected()966cdf0e10cSrcweir     public void showSelected()
967cdf0e10cSrcweir     {
968cdf0e10cSrcweir         int oldPageStart = pageStart;
969cdf0e10cSrcweir         if (selected == -1)
970cdf0e10cSrcweir         {
971cdf0e10cSrcweir             pageStart += 0;
972cdf0e10cSrcweir         }
973cdf0e10cSrcweir         else
974cdf0e10cSrcweir         {
975cdf0e10cSrcweir             pageStart = (selected / m_aImages.length) * m_aImages.length;
976cdf0e10cSrcweir         }
977cdf0e10cSrcweir         if (oldPageStart != pageStart)
978cdf0e10cSrcweir         {
979cdf0e10cSrcweir             enableButtons();
980cdf0e10cSrcweir             refreshImages();
981cdf0e10cSrcweir         }
982cdf0e10cSrcweir     }
983cdf0e10cSrcweir 
setRowSelect(boolean b)984cdf0e10cSrcweir     public void setRowSelect(boolean b)
985cdf0e10cSrcweir     {
986cdf0e10cSrcweir         rowSelect = b;
987cdf0e10cSrcweir     }
988cdf0e10cSrcweir 
isRowSelect()989cdf0e10cSrcweir     public boolean isRowSelect()
990cdf0e10cSrcweir     {
991cdf0e10cSrcweir         return rowSelect;
992cdf0e10cSrcweir     }
993cdf0e10cSrcweir 
994cdf0e10cSrcweir     private class ImageKeyListener implements XKeyListener
995cdf0e10cSrcweir     {
996cdf0e10cSrcweir 
997cdf0e10cSrcweir         /* (non-Javadoc)
998cdf0e10cSrcweir          * @see com.sun.star.awt.XKeyListener#keyPressed(com.sun.star.awt.KeyEvent)
999cdf0e10cSrcweir          */
keyPressed(KeyEvent ke)1000cdf0e10cSrcweir         public void keyPressed(KeyEvent ke)
1001cdf0e10cSrcweir         {
1002cdf0e10cSrcweir             int image = getImageFromEvent(ke);
1003cdf0e10cSrcweir             int r = image / getCols();
1004cdf0e10cSrcweir             int c = image - (r * getCols());
1005cdf0e10cSrcweir             int d = getKeyMove(ke, r, c);
1006cdf0e10cSrcweir             int newImage = image + d;
1007cdf0e10cSrcweir             if (newImage == image)
1008cdf0e10cSrcweir             {
1009cdf0e10cSrcweir                 return;
1010cdf0e10cSrcweir             }
1011cdf0e10cSrcweir             if (isFocusable(newImage))
1012cdf0e10cSrcweir             {
1013cdf0e10cSrcweir                 changeFocus(image, newImage);
1014cdf0e10cSrcweir             }
1015cdf0e10cSrcweir         }
1016cdf0e10cSrcweir 
isFocusable(int image)1017cdf0e10cSrcweir         private boolean isFocusable(int image)
1018cdf0e10cSrcweir         {
1019cdf0e10cSrcweir             return (image >= 0) && (getIndexFor(image) < listModel.getSize());
1020cdf0e10cSrcweir         }
1021cdf0e10cSrcweir 
changeFocus(int oldFocusImage, int newFocusImage)1022cdf0e10cSrcweir         private void changeFocus(int oldFocusImage, int newFocusImage)
1023cdf0e10cSrcweir         {
1024cdf0e10cSrcweir             focus(newFocusImage);
1025cdf0e10cSrcweir             defocus(oldFocusImage);
1026cdf0e10cSrcweir         }
1027cdf0e10cSrcweir 
getKeyMove(KeyEvent ke, int row, int col)1028cdf0e10cSrcweir         private final int getKeyMove(KeyEvent ke, int row, int col)
1029cdf0e10cSrcweir         {
1030cdf0e10cSrcweir             switch (ke.KeyCode)
1031cdf0e10cSrcweir             {
1032cdf0e10cSrcweir                 case Key.UP:
1033cdf0e10cSrcweir                     if (row > 0)
1034cdf0e10cSrcweir                     {
1035cdf0e10cSrcweir                         return 0 - getCols();
1036cdf0e10cSrcweir                     }
1037cdf0e10cSrcweir                     break;
1038cdf0e10cSrcweir                 case Key.DOWN:
1039cdf0e10cSrcweir                     if (row < getRows() - 1)
1040cdf0e10cSrcweir                     {
1041cdf0e10cSrcweir                         return getCols();
1042cdf0e10cSrcweir                     }
1043cdf0e10cSrcweir                     break;
1044cdf0e10cSrcweir                 case Key.LEFT:
1045cdf0e10cSrcweir                     if (col > 0)
1046cdf0e10cSrcweir                     {
1047cdf0e10cSrcweir                         return -1;
1048cdf0e10cSrcweir                     }
1049cdf0e10cSrcweir                     break;
1050cdf0e10cSrcweir                 case Key.RIGHT:
1051cdf0e10cSrcweir                     if (col < getCols() - 1)
1052cdf0e10cSrcweir                     {
1053cdf0e10cSrcweir                         return 1;
1054cdf0e10cSrcweir                     }
1055cdf0e10cSrcweir                     break;
1056cdf0e10cSrcweir                 case Key.SPACE:
1057cdf0e10cSrcweir                     select(ke);
1058cdf0e10cSrcweir             }
1059cdf0e10cSrcweir             return 0;
1060cdf0e10cSrcweir         }
1061cdf0e10cSrcweir 
select(KeyEvent ke)1062cdf0e10cSrcweir         private void select(KeyEvent ke)
1063cdf0e10cSrcweir         {
1064cdf0e10cSrcweir             setSelected(getIndexFor(getImageFromEvent(ke)));
1065cdf0e10cSrcweir         }
1066cdf0e10cSrcweir 
keyReleased(KeyEvent ke)1067cdf0e10cSrcweir         public void keyReleased(KeyEvent ke)
1068cdf0e10cSrcweir         {
1069cdf0e10cSrcweir         }
1070cdf0e10cSrcweir 
disposing(EventObject arg0)1071cdf0e10cSrcweir         public void disposing(EventObject arg0)
1072cdf0e10cSrcweir         {
1073cdf0e10cSrcweir         }
1074cdf0e10cSrcweir     }
1075cdf0e10cSrcweir 
focus(int image)1076cdf0e10cSrcweir     private final void focus(int image)
1077cdf0e10cSrcweir     {
1078cdf0e10cSrcweir         Helper.setUnoPropertyValue(m_aImages[image].getModel(), "Tabstop",
1079cdf0e10cSrcweir                 Boolean.TRUE);
1080cdf0e10cSrcweir         XWindow xWindow = UnoRuntime.queryInterface(XWindow.class, m_aImages[image]);
1081cdf0e10cSrcweir         xWindow.setFocus();
1082cdf0e10cSrcweir     }
1083cdf0e10cSrcweir 
defocus(int image)1084cdf0e10cSrcweir     private final void defocus(int image)
1085cdf0e10cSrcweir     {
1086cdf0e10cSrcweir         Helper.setUnoPropertyValue(UnoDialog.getModel(m_aImages[image]), "Tabstop",
1087cdf0e10cSrcweir                 Boolean.FALSE);
1088cdf0e10cSrcweir 
1089cdf0e10cSrcweir     }
1090cdf0e10cSrcweir 
1091cdf0e10cSrcweir     /**
1092cdf0e10cSrcweir      * jump to the given item (display the screen
1093cdf0e10cSrcweir      * that contains the given item).
1094cdf0e10cSrcweir      * @param i
1095cdf0e10cSrcweir      */
display(int i)1096cdf0e10cSrcweir     public void display(int i)
1097cdf0e10cSrcweir     {
1098cdf0e10cSrcweir         int is = (getCols() * getRows());
1099cdf0e10cSrcweir         int ps = (listModel.getSize() / is) * is;
1100cdf0e10cSrcweir         setPageStart(ps);
1101cdf0e10cSrcweir     }
1102cdf0e10cSrcweir 
1103cdf0e10cSrcweir     /**
1104cdf0e10cSrcweir      * @return
1105cdf0e10cSrcweir      */
isenabled()1106cdf0e10cSrcweir     public boolean isenabled()
1107cdf0e10cSrcweir     {
1108cdf0e10cSrcweir         return benabled;
1109cdf0e10cSrcweir     }
1110cdf0e10cSrcweir 
1111cdf0e10cSrcweir     /**
1112cdf0e10cSrcweir      * @param b
1113cdf0e10cSrcweir      */
setenabled(boolean b)1114cdf0e10cSrcweir     public void setenabled(boolean b)
1115cdf0e10cSrcweir     {
1116cdf0e10cSrcweir 
1117cdf0e10cSrcweir         for (int i = 0; i < m_aImages.length; i++)
1118cdf0e10cSrcweir         {
1119cdf0e10cSrcweir             UnoDialog2.setEnabled(m_aImages[i], b);
1120cdf0e10cSrcweir         }
1121cdf0e10cSrcweir         UnoDialog2.setEnabled(grbxSelectedImage, b);
1122cdf0e10cSrcweir         UnoDialog2.setEnabled(lblImageText, b);
1123cdf0e10cSrcweir         if (showButtons)
1124cdf0e10cSrcweir         {
1125cdf0e10cSrcweir             UnoDialog2.setEnabled(btnBack, b);
1126cdf0e10cSrcweir             UnoDialog2.setEnabled(btnNext, b);
1127cdf0e10cSrcweir             UnoDialog2.setEnabled(lblCounter, b);
1128cdf0e10cSrcweir         }
1129cdf0e10cSrcweir         benabled = b;
1130cdf0e10cSrcweir     }
1131cdf0e10cSrcweir }
1132