blob: 44a4634b10dda0de4c0f925f909964471235c5d7 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
package com.sun.star.wizards.ui;
// import com.sun.star.awt.*;
import com.sun.star.awt.Key;
import com.sun.star.awt.KeyEvent;
import com.sun.star.awt.MouseEvent;
import com.sun.star.awt.Size;
import com.sun.star.awt.XButton;
import com.sun.star.awt.XControl;
import com.sun.star.awt.XFixedText;
import com.sun.star.awt.XItemEventBroadcaster;
import com.sun.star.awt.XItemListener;
import com.sun.star.awt.XKeyListener;
import com.sun.star.awt.XMouseListener;
import com.sun.star.awt.XWindow;
import com.sun.star.lang.EventObject;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.wizards.common.Helper;
import com.sun.star.wizards.common.HelpIds;
import com.sun.star.wizards.common.IRenderer;
import com.sun.star.wizards.common.PropertyNames;
import com.sun.star.wizards.ui.event.*;
//import com.sun.star.awt.ItemEvent;
//import com.sun.star.awt.XItemListener;
import javax.swing.ListModel;
import javax.swing.event.ListDataEvent;
import javax.swing.event.ListDataListener;
/**
*
* @author rpiterman
*/
public class ImageList implements XItemEventBroadcaster, ListDataListener
{
// private XControl imgContainer;
private XFixedText lblImageText;
private XFixedText grbxSelectedImage;
private XButton btnBack;
private XButton btnNext;
private XFixedText lblCounter;
private XControl m_aImages[];
private boolean benabled = true;
private UnoDialog2 oUnoDialog;
private Size gap = new Size(4, 4);
private int cols = 4;
private int rows = 3;
private Size imageSize = new Size(20, 20);
private Size pos;
private Size selectionGap = new Size(2, 2);
private boolean showButtons = true;
private Short step;
private final static Short NO_BORDER = new Short((short) 0);
private boolean refreshOverNull = true;
private int imageTextLines = 1;
private boolean rowSelect = false;
public int tabIndex;
public Boolean scaleImages = Boolean.TRUE;
public String name = "il";
private int selected = -1;
private int pageStart = 0;
public int helpURL = 0;
private CommonListener uiEventListener = new CommonListener();
private IImageRenderer renderer;
private ListModel listModel;
public IRenderer counterRenderer = new SimpleCounterRenderer();
private Object dialogModel;
private ImageKeyListener imageKeyListener;
private static final Integer BACKGROUND_COLOR = 16777216; //new Integer(SystemColor.window.getRGB() + 16777216);
private final static Short HIDE_PAGE = new Short((short) 99);
private final static Integer TRANSPARENT = new Integer(-1);
private final static int LINE_HEIGHT = 8; //private MethodInvocation METHOD_MOUSE_ENTER_IMAGE;
//private MethodInvocation METHOD_MOUSE_EXIT_IMAGE;
private MethodInvocation METHOD_MOUSE_PRESSED;
/** Getter for property imageSize.
* @return Value of property imageSize.
*
*/
public Size getImageSize()
{
return this.imageSize;
}
/** Setter for property imageSize.
* @param imageSize New value of property imageSize.
*
*/
public void setImageSize(Size imageSize)
{
this.imageSize = imageSize;
}
class OMouseListener implements XMouseListener
{
public OMouseListener()
{}
public void mousePressed(MouseEvent arg0)
{
focus(getImageIndexFor(getSelected()));
}
public void mouseReleased(MouseEvent arg0)
{
}
public void mouseEntered(MouseEvent arg0)
{
}
public void mouseExited(MouseEvent arg0)
{
}
public void disposing(EventObject arg0)
{
}
}
public void create(UnoDialog2 dialog)
{
oUnoDialog = dialog;
dialogModel = dialog.xDialogModel;
int imageTextHeight = imageTextLines * LINE_HEIGHT;
PeerConfig opeerConfig = new PeerConfig(dialog);
MOVE_SELECTION_VALS[2] = step;
XControl imgContainer = dialog.insertImage(name + "lblContainer",
new String[]
{
"BackgroundColor",
PropertyNames.PROPERTY_BORDER,
PropertyNames.PROPERTY_HEIGHT,
PropertyNames.PROPERTY_POSITION_X,
PropertyNames.PROPERTY_POSITION_Y,
PropertyNames.PROPERTY_STEP,
PropertyNames.PROPERTY_WIDTH
},
new Object[]
{
BACKGROUND_COLOR,
new Short((short) 1),
new Integer((imageSize.Height + gap.Height) * rows + gap.Height + imageTextHeight + 1),
new Integer(pos.Width),
new Integer(pos.Height),
step,
new Integer((imageSize.Width + gap.Width) * cols + gap.Width)
});
opeerConfig.setPeerProperties(imgContainer, new String[]
{
"MouseTransparent"
}, new Object[]
{
Boolean.TRUE
});
//XWindow win = (XWindow)UnoRuntime.queryInterface(XWindow.class,lblContainer);
/*dialog.xWindow.addWindowListener(uiEventListener);
String dName = (String)Helper.getUnoPropertyValue(dialog.xDialogModel,PropertyNames.PROPERTY_NAME);
uiEventListener.add(dName,EventNames.EVENT_WINDOW_SHOWN,"disableContainerMouseEvents",this);
*/
int selectionWidth = rowSelect ?
(imageSize.Width + gap.Width) * cols - gap.Width + (selectionGap.Width * 2) :
imageSize.Width + (selectionGap.Width * 2);
grbxSelectedImage = dialog.insertLabel(name + "_grbxSelected", new String[]
{
"BackgroundColor",
PropertyNames.PROPERTY_BORDER,
PropertyNames.PROPERTY_HEIGHT,
PropertyNames.PROPERTY_POSITION_X,
PropertyNames.PROPERTY_POSITION_Y,
PropertyNames.PROPERTY_STEP,
"Tabstop",
PropertyNames.PROPERTY_WIDTH
}, new Object[]
{
TRANSPARENT,
new Short((short) 1),
new Integer(imageSize.Height + (selectionGap.Height * 2)),
//height
0, //posx
0, //posy
step,
Boolean.TRUE,
new Integer(selectionWidth)
});
XWindow xWindow = UnoRuntime.queryInterface(XWindow.class, grbxSelectedImage);
xWindow.addMouseListener(new OMouseListener());
final String[] pNames1 = new String[]
{
PropertyNames.PROPERTY_HEIGHT,
PropertyNames.PROPERTY_HELPURL,
PropertyNames.PROPERTY_POSITION_X,
PropertyNames.PROPERTY_POSITION_Y,
PropertyNames.PROPERTY_STEP,
PropertyNames.PROPERTY_TABINDEX,
"Tabstop",
PropertyNames.PROPERTY_WIDTH
};
lblImageText = dialog.insertLabel(name + "_imageText", pNames1, new Object[]
{
new Integer(imageTextHeight),
PropertyNames.EMPTY_STRING,
new Integer(pos.Width + 1),
new Integer(pos.Height + (imageSize.Height + gap.Height) * rows + gap.Height),
step,
new Short((short) 0),
Boolean.FALSE,
new Integer(cols * (imageSize.Width + gap.Width) + gap.Width - 2)
});
if (showButtons)
{
final Integer btnSize = 14;
btnBack = dialog.insertButton(name + "_btnBack", "prevPage", this, pNames1, new Object[]
{
btnSize,
HelpIds.getHelpIdString(helpURL++),
new Integer(pos.Width),
new Integer(pos.Height + (imageSize.Height + gap.Height) * rows + gap.Height + imageTextHeight + 1),
step,
new Short((short) (tabIndex + 1)),
Boolean.TRUE,
btnSize
});
btnNext = dialog.insertButton(name + "_btnNext", "nextPage", this, pNames1, new Object[]
{
btnSize,
HelpIds.getHelpIdString(helpURL++),
new Integer(pos.Width + (imageSize.Width + gap.Width) * cols + gap.Width - btnSize.intValue() + 1),
new Integer(pos.Height + (imageSize.Height + gap.Height) * rows + gap.Height + imageTextHeight + 1),
step,
new Short((short) (tabIndex + 2)),
Boolean.TRUE,
btnSize
});
lblCounter = dialog.insertLabel(name + "_lblCounter", pNames1, new Object[]
{
new Integer(LINE_HEIGHT),
PropertyNames.EMPTY_STRING,
new Integer(pos.Width + btnSize.intValue() + 1),
new Integer(pos.Height + (imageSize.Height + gap.Height) * rows + gap.Height + imageTextHeight + ((btnSize.intValue() - LINE_HEIGHT) / 2)),
step,
new Short((short) 0),
Boolean.FALSE,
new Integer(cols * (imageSize.Width + gap.Width) + gap.Width - 2 * btnSize.intValue() - 1)
});
Helper.setUnoPropertyValue(getModel(lblCounter), PropertyNames.PROPERTY_ALIGN, new Short((short) 1));
Helper.setUnoPropertyValue(getModel(btnBack), PropertyNames.PROPERTY_LABEL, "<");
Helper.setUnoPropertyValue(getModel(btnNext), PropertyNames.PROPERTY_LABEL, ">");
}
imageKeyListener = new ImageKeyListener();
m_tabIndex = new Short((short) tabIndex);
m_aImages = new XControl[rows * cols];
try
{
//METHOD_MOUSE_ENTER_IMAGE = new MethodInvocation("mouseEnterImage",this,Object.class);
//METHOD_MOUSE_EXIT_IMAGE = new MethodInvocation("mouseExitImage",this,Object.class);
METHOD_MOUSE_PRESSED = new MethodInvocation("mousePressed", this, Object.class);
}
catch (NoSuchMethodException e)
{
e.printStackTrace();
}
m_imageHeight = new Integer(imageSize.Height);
m_imageWidth = new Integer(imageSize.Width);
for (int r = 0; r < rows; r++)
{
for (int c = 0; c < cols; c++)
{
m_aImages[r * cols + c] = createImage(dialog, r, c);
}
}
refreshImages();
listModel.addListDataListener(this);
}
private Integer m_imageHeight, m_imageWidth;
private final static String[] IMAGE_PROPS = new String[]
{
PropertyNames.PROPERTY_BORDER,
"BackgroundColor",
PropertyNames.PROPERTY_HEIGHT,
PropertyNames.PROPERTY_HELPURL,
PropertyNames.PROPERTY_POSITION_X,
PropertyNames.PROPERTY_POSITION_Y,
"ScaleImage",
PropertyNames.PROPERTY_STEP,
PropertyNames.PROPERTY_TABINDEX,
"Tabstop",
PropertyNames.PROPERTY_WIDTH
};
//used for optimization
private Short m_tabIndex;
private XControl createImage(UnoDialog2 dialog, int _row, int _col)
{
String imageName = name + "_image" + (_row * cols + _col);
XControl image = dialog.insertImage(imageName,
IMAGE_PROPS,
new Object[]
{
NO_BORDER,
BACKGROUND_COLOR,
m_imageHeight,
HelpIds.getHelpIdString(helpURL++),
new Integer(getImagePosX(_col)),
new Integer(getImagePosY(_row)),
scaleImages,
step,
m_tabIndex,
Boolean.FALSE,
m_imageWidth
});
XWindow win = UnoRuntime.queryInterface(XWindow.class, image);
win.addMouseListener(uiEventListener);
win.addKeyListener(imageKeyListener);
//uiEventListener.add(imageName,EventNames.EVENT_MOUSE_ENTERED,METHOD_MOUSE_ENTER_IMAGE);
//uiEventListener.add(imageName,EventNames.EVENT_MOUSE_EXITED,METHOD_MOUSE_EXIT_IMAGE);
uiEventListener.add(imageName, EventNames.EVENT_MOUSE_PRESSED, METHOD_MOUSE_PRESSED);
return image;
}
private int getImagePosX(int col)
{
return pos.Width + col * (imageSize.Width + gap.Width) + gap.Width;
}
private int getImagePosY(int row)
{
return pos.Height + row * (imageSize.Height + gap.Height) + gap.Height;
}
private void refreshImages()
{
if (showButtons)
{
refreshCounterText();
}
hideSelection();
if (refreshOverNull)
{
for (int i = 0; i < m_aImages.length; i++)
{
setVisible(m_aImages[i], false);
}
}
boolean focusable = true;
for (int i = 0; i < m_aImages.length; i++)
{
Object[] oResources = renderer.getImageUrls(getObjectFor(i));
if (oResources != null)
{
if (oResources.length == 1)
{
Helper.setUnoPropertyValue(m_aImages[i].getModel(), PropertyNames.PROPERTY_IMAGEURL, oResources[0]);
}
else if (oResources.length == 2)
{
oUnoDialog.getPeerConfiguration().setImageUrl(m_aImages[i].getModel(), oResources[0], oResources[1]);
}
Helper.setUnoPropertyValue(m_aImages[i].getModel(), "Tabstop", focusable ? Boolean.TRUE : Boolean.FALSE);
if (refreshOverNull)
{
setVisible(m_aImages[i], true);
}
focusable = false;
}
}
refreshSelection();
}
private void refreshCounterText()
{
Helper.setUnoPropertyValue(getModel(lblCounter), PropertyNames.PROPERTY_LABEL, counterRenderer.render(new Counter(pageStart + 1, pageEnd(), listModel.getSize())));
}
private int pageEnd()
{
int i = pageStart + cols * rows;
if (i > listModel.getSize() - 1)
{
return listModel.getSize();
}
else
{
return i;
}
}
private void refreshSelection()
{
if (selected < pageStart || selected >= (pageStart + rows * cols))
{
hideSelection();
}
else
{
moveSelection(getImageIndexFor(selected));
}
}
private void hideSelection()
{
Helper.setUnoPropertyValue(getModel(grbxSelectedImage), PropertyNames.PROPERTY_STEP, HIDE_PAGE);
setVisible(grbxSelectedImage, false);
}
private final static String[] MOVE_SELECTION = new String[]
{
PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP
};
private Object[] MOVE_SELECTION_VALS = new Object[3];
/** Utility field holding list of ItemListeners. */
private transient java.util.ArrayList itemListenerList;
private void moveSelection(int image)
{
//System.out.println(image);
setVisible(grbxSelectedImage, false);
int row = image / cols;
int col = rowSelect ? 0 : image - (row * cols);
MOVE_SELECTION_VALS[0] = new Integer(getImagePosX(col) - selectionGap.Width);
MOVE_SELECTION_VALS[1] = new Integer(getImagePosY(row) - selectionGap.Height);
Helper.setUnoPropertyValues(getModel(grbxSelectedImage), MOVE_SELECTION, MOVE_SELECTION_VALS);
if (((Number) Helper.getUnoPropertyValue(dialogModel, PropertyNames.PROPERTY_STEP)).shortValue() == step.shortValue())
{
setVisible(grbxSelectedImage, true); //now focus...
}
for (int i = 0; i < m_aImages.length; i++)
{
if (i != image)
{
defocus(i);
}
else
{
Helper.setUnoPropertyValue(m_aImages[image].getModel(), "Tabstop", Boolean.TRUE);
}
}
}
private void setVisible(Object control, boolean visible)
{
UnoRuntime.queryInterface(XWindow.class, control).setVisible(visible);
}
/**
*
* @param i
* @return the Object in the list model corresponding to the given image index.
*/
private Object getObjectFor(int i)
{
int ii = getIndexFor(i);
if (listModel.getSize() <= ii)
{
return null;
}
else
{
return listModel.getElementAt(ii);
}
}
/**
*
* @param i
* @return the index in the listModel for the given image index.
*/
private int getIndexFor(int i)
{
return pageStart + i;
}
private int getImageIndexFor(int i)
{
return i - pageStart;
}
public void contentsChanged(ListDataEvent event)
{
/*//if the content that was changed is in the displayed range, refresh...
if ( (event.getIndex1() < getIndexFor(0)) // range is before...
|| event.getIndex0() > getIndexFor( cols*rows - 1)) ; //do nothing
else
refreshImages();
*/ //selected = 0;
//pageStart = 0;
//if (event.refreshImages();
}
public void intervalAdded(ListDataEvent event)
{
if (event.getIndex0() <= selected)
{
if (event.getIndex1() <= selected)
{
selected += event.getIndex1() - event.getIndex0() + 1;
}
}
if (event.getIndex0() < pageStart || event.getIndex1() < (pageStart + getRows() + getCols()))
{
refreshImages();
}
}
public void intervalRemoved(ListDataEvent event)
{
//contentsChanged(event);
}
/** Registers ItemListener to receive events.
* @param listener The listener to register.
*
*/
public synchronized void addItemListener(XItemListener listener)
{
if (itemListenerList == null)
{
itemListenerList = new java.util.ArrayList();
}
itemListenerList.add(listener);
}
/** Removes ItemListener from the list of listeners.
* @param listener The listener to remove.
*
*/
public synchronized void removeItemListener(XItemListener listener)
{
if (itemListenerList != null)
{
itemListenerList.remove(listener);
}
}
/** Notifies all registered listeners about the event.
*
* @param event The event to be fired
*
*/
private void fireItemSelected()
{
// java.awt.event.ItemEvent event = new java.awt.event.ItemEvent(this, 0,
// getSelectedObject(), java.awt.event.ItemEvent.SELECTED);
java.util.ArrayList list;
synchronized(this)
{
if (itemListenerList == null)
{
return;
}
list = (java.util.ArrayList) itemListenerList.clone();
}
for (int i = 0; i < list.size(); i++)
{
((com.sun.star.awt.XItemListener) list.get(i)).itemStateChanged(null);
}
}
/**
* @return
*/
public int getCols()
{
return cols;
}
/**
* @return
*/
public Size getGap()
{
return gap;
}
/**
* @return
*/
public ListModel getListModel()
{
return listModel;
}
/**
* @return
*/
public Short getStep()
{
return step;
}
/**
* @return
*/
public int getPageStart()
{
return pageStart;
}
/**
* @return
*/
public Size getPos()
{
return pos;
}
/**
* @return
*/
public IImageRenderer getRenderer()
{
return renderer;
}
/**
* @return
*/
public int getRows()
{
return rows;
}
/**
* @return
*/
public int getSelected()
{
return selected;
}
/**
* @return
*/
public Size getSelectionGap()
{
return selectionGap;
}
/**
* @return
*/
public boolean isShowButtons()
{
return showButtons;
}
/**
* @param i
*/
public void setCols(int i)
{
cols = i;
}
/**
* @param size
*/
public void setGap(Size size)
{
gap = size;
}
/**
* @param model
*/
public void setListModel(ListModel model)
{
listModel = model;
}
/**
* @param short1
*/
public void setStep(Short short1)
{
step = short1;
}
/**
* @param i
*/
public void setPageStart(int i)
{
if (i == pageStart)
{
return;
}
pageStart = i;
enableButtons();
refreshImages();
}
/**
* @param size
*/
public void setPos(Size size)
{
pos = size;
}
/**
* @param renderer
*/
public void setRenderer(IImageRenderer renderer)
{
this.renderer = renderer;
}
/**
* @param i
*/
public void setRows(int i)
{
rows = i;
}
/**
* @param i
*/
public void setSelected(int i)
{
if (rowSelect && (i >= 0))
{
i = (i / cols) * cols;
}
if (selected == i)
{
return;
}
selected = i;
refreshImageText();
refreshSelection();
fireItemSelected();
}
public void setSelected(Object object)
{
if (object == null)
{
setSelected(-1);
}
else
{
for (int i = 0; i < getListModel().getSize(); i++)
{
if (getListModel().getElementAt(i).equals(object))
{
setSelected(i);
return;
}
}
}
setSelected(-1);
}
private void refreshImageText()
{
Object item = selected >= 0 ? getListModel().getElementAt(selected) : null;
Helper.setUnoPropertyValue(getModel(lblImageText), PropertyNames.PROPERTY_LABEL, PropertyNames.SPACE + renderer.render(item));
}
/**
* @param size
*/
public void setSelectionGap(Size size)
{
selectionGap = size;
}
/**
* @param b
*/
public void setShowButtons(boolean b)
{
showButtons = b;
}
public void nextPage()
{
if (pageStart < getListModel().getSize() - rows * cols)
{
setPageStart(pageStart + rows * cols);
}
}
public void prevPage()
{
if (pageStart == 0)
{
return;
}
int i = pageStart - rows * cols;
if (i < 0)
{
i = 0;
}
setPageStart(i);
}
private void enableButtons()
{
enable(btnNext, Boolean.valueOf(pageStart + rows * cols < listModel.getSize()));
enable(btnBack, Boolean.valueOf(pageStart > 0));
}
private void enable(Object control, Boolean enable)
{
Helper.setUnoPropertyValue(getModel(control), PropertyNames.PROPERTY_ENABLED, enable);
}
private Object getModel(Object control)
{
return UnoRuntime.queryInterface(XControl.class, control).getModel();
}
/*
public void mouseEnterImage(Object event) {
System.out.println("mouse enter");
int i = getImageFromEvent(event);
//TODO what is when the image does not display an image?
if (getIndexFor(i) != selected)
setBorder(m_aImages[i],imageBorderMO);
}
public void mouseExitImage(Object event) {
//System.out.println("mouse exit");
int i = getImageFromEvent(event);
//TODO what is when the image does not display an image?
if (getIndexFor(i) != selected)
setBorder(m_aImages[i],imageBorder);
}
*/
private void setBorder(Object control, Short border)
{
Helper.setUnoPropertyValue(getModel(control), PropertyNames.PROPERTY_BORDER, border);
//XWindowPeer peer = ((XControl)UnoRuntime.queryInterface(XControl.class,control)).getPeer();
//peer.invalidate(InvalidateStyle.CHILDREN);
}
private int getImageFromEvent(Object event)
{
Object image = ((EventObject) event).Source;
String controlName = (String) Helper.getUnoPropertyValue(getModel(image), PropertyNames.PROPERTY_NAME);
return Integer.valueOf(controlName.substring(6 + name.length())).intValue();
}
public void mousePressed(Object event)
{
int image = getImageFromEvent(event);
int index = getIndexFor(image);
if (index < listModel.getSize())
{
focus(image);
setSelected(index);
}
}
public Object[] getSelectedObjects()
{
return new Object[]
{
getListModel().getElementAt(selected)
};
}
/**
*/
public static interface IImageRenderer extends IRenderer
{
/**
*
* @param listItem
* @return two resource ids for an image referenced in the imaglist resourcefile of the
* wizards project; The second one of them is designed to be used for High Contrast Mode.
*/
public Object[] getImageUrls(Object listItem);
}
private static class SimpleCounterRenderer implements IRenderer
{
public String render(Object counter)
{
return PropertyNames.EMPTY_STRING + ((Counter) counter).start + ".." + ((Counter) counter).end + "/" + ((Counter) counter).max;
}
}
public static class Counter
{
public int start, end, max;
public Counter(int start_, int end_, int max_)
{
start = start_;
end = end_;
max = max_;
}
}
public Object getSelectedObject()
{
return selected >= 0 ? getListModel().getElementAt(selected) : null;
}
public void showSelected()
{
int oldPageStart = pageStart;
if (selected == -1)
{
pageStart += 0;
}
else
{
pageStart = (selected / m_aImages.length) * m_aImages.length;
}
if (oldPageStart != pageStart)
{
enableButtons();
refreshImages();
}
}
public void setRowSelect(boolean b)
{
rowSelect = b;
}
public boolean isRowSelect()
{
return rowSelect;
}
private class ImageKeyListener implements XKeyListener
{
/* (non-Javadoc)
* @see com.sun.star.awt.XKeyListener#keyPressed(com.sun.star.awt.KeyEvent)
*/
public void keyPressed(KeyEvent ke)
{
int image = getImageFromEvent(ke);
int r = image / getCols();
int c = image - (r * getCols());
int d = getKeyMove(ke, r, c);
int newImage = image + d;
if (newImage == image)
{
return;
}
if (isFocusable(newImage))
{
changeFocus(image, newImage);
}
}
private boolean isFocusable(int image)
{
return (image >= 0) && (getIndexFor(image) < listModel.getSize());
}
private void changeFocus(int oldFocusImage, int newFocusImage)
{
focus(newFocusImage);
defocus(oldFocusImage);
}
private final int getKeyMove(KeyEvent ke, int row, int col)
{
switch (ke.KeyCode)
{
case Key.UP:
if (row > 0)
{
return 0 - getCols();
}
break;
case Key.DOWN:
if (row < getRows() - 1)
{
return getCols();
}
break;
case Key.LEFT:
if (col > 0)
{
return -1;
}
break;
case Key.RIGHT:
if (col < getCols() - 1)
{
return 1;
}
break;
case Key.SPACE:
select(ke);
}
return 0;
}
private void select(KeyEvent ke)
{
setSelected(getIndexFor(getImageFromEvent(ke)));
}
public void keyReleased(KeyEvent ke)
{
}
public void disposing(EventObject arg0)
{
}
}
private final void focus(int image)
{
Helper.setUnoPropertyValue(m_aImages[image].getModel(), "Tabstop",
Boolean.TRUE);
XWindow xWindow = UnoRuntime.queryInterface(XWindow.class, m_aImages[image]);
xWindow.setFocus();
}
private final void defocus(int image)
{
Helper.setUnoPropertyValue(UnoDialog.getModel(m_aImages[image]), "Tabstop",
Boolean.FALSE);
}
/**
* jump to the given item (display the screen
* that contains the given item).
* @param i
*/
public void display(int i)
{
int is = (getCols() * getRows());
int ps = (listModel.getSize() / is) * is;
setPageStart(ps);
}
/**
* @return
*/
public boolean isenabled()
{
return benabled;
}
/**
* @param b
*/
public void setenabled(boolean b)
{
for (int i = 0; i < m_aImages.length; i++)
{
UnoDialog2.setEnabled(m_aImages[i], b);
}
UnoDialog2.setEnabled(grbxSelectedImage, b);
UnoDialog2.setEnabled(lblImageText, b);
if (showButtons)
{
UnoDialog2.setEnabled(btnBack, b);
UnoDialog2.setEnabled(btnNext, b);
UnoDialog2.setEnabled(lblCounter, b);
}
benabled = b;
}
}