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