* @author Jihoon Song {@literal <jihoon80.song@samsung.com>} (S-Core)\r
*/\r
public class PictureLabel extends Canvas {\r
- private Image image;\r
- private String text;\r
- private boolean selected;\r
- private List<ImageClickedListener> imageClickedListeners = new ArrayList<ImageClickedListener>();\r
-\r
- public PictureLabel(Composite parent, int style) {\r
- super(parent, style);\r
-\r
- // default background color\r
- setBackground(getDisplay().getSystemColor(SWT.COLOR_WHITE));\r
-\r
- // add listener\r
- addDisposeListener(new DisposeListener() {\r
- public void widgetDisposed(DisposeEvent e) {}\r
- });\r
- addPaintListener(new PaintListener() {\r
- public void paintControl(PaintEvent e) {\r
- PictureLabel.this.paintControl(e);\r
- }\r
- });\r
- addMouseListener(new MouseAdapter() {\r
- public void mouseDown(MouseEvent event) {\r
- if (event.button == java.awt.event.MouseEvent.BUTTON1) {\r
- PictureLabel.this.mouseDown(event);\r
- }\r
- }\r
- });\r
- addMouseTrackListener(new MouseTrackAdapter() {\r
- public void mouseEnter(MouseEvent event) {\r
- PictureLabel.this.mouseEnter(event);\r
- }\r
- public void mouseExit(MouseEvent event) {\r
- PictureLabel.this.mouseExit(event);\r
- }\r
- });\r
-\r
- setSelection(false);\r
- }\r
-\r
- public void mouseDown(MouseEvent event) {\r
- ImageClickedEvent e = new ImageClickedEvent(this, event.x, event.y);\r
- setSelection(!selected);\r
- for (ImageClickedListener listener : imageClickedListeners) {\r
- listener.imageClicked(e);\r
- }\r
- }\r
-\r
- protected void mouseEnter(MouseEvent event) {\r
- setBackground(getDisplay().getSystemColor(SWT.COLOR_WIDGET_LIGHT_SHADOW));\r
- }\r
-\r
- protected void mouseExit(MouseEvent event) {\r
- setBackground(getDisplay().getSystemColor(selected ? SWT.COLOR_GRAY : SWT.COLOR_WHITE));\r
- }\r
-\r
- public void setSelection(boolean selected) {\r
- this.selected = selected;\r
- setBackground(getDisplay().getSystemColor(selected ? SWT.COLOR_GRAY : SWT.COLOR_WHITE));\r
- }\r
-\r
- public void addImageClickedListener(ImageClickedListener listener) {\r
- imageClickedListeners.add(listener);\r
- }\r
-\r
- public void removeImageClickedListener(ImageClickedListener listener) {\r
- imageClickedListeners.remove(listener);\r
- }\r
-\r
- void paintControl(PaintEvent e) {\r
- GC gc = e.gc;\r
- int x = 1;\r
- int y = 1;\r
- int clientAreaWidth = getClientArea().width;\r
- int imageWidth = image.getBounds().width;\r
- int imageHeght = image.getBounds().height;\r
- int maxWidth = Math.max(Math.max(imageWidth, imageWidth), clientAreaWidth);\r
-\r
- if ((image != null) & (text != null)) {\r
- int textWidth = gc.stringExtent(text).x;\r
- x = 1 + (maxWidth - imageWidth) / 2;\r
- gc.drawImage(image, x, y);\r
- y = y + imageHeght + 5;\r
- x = 1 + (maxWidth - textWidth) / 2;\r
- gc.drawText(text, x, y);\r
- } else if (image != null) {\r
- x = 1 + (maxWidth - imageWidth) / 2;\r
- gc.drawImage(image, x, 1);\r
- } else if (text != null) {\r
- int textWidth = gc.stringExtent(text).x;\r
- x = 1 + (maxWidth - textWidth) / 2;\r
- gc.drawText(text, x, 1);\r
- }\r
- gc.dispose();\r
- }\r
-\r
- public Image getImage() {\r
- return image;\r
- }\r
-\r
- public void setImage(Image image) {\r
- this.image = image;\r
- redraw();\r
- }\r
-\r
- public String getText() {\r
- return text;\r
- }\r
-\r
- public void setText(String text) {\r
- this.text = text;\r
- redraw();\r
- }\r
-\r
- public Point computeSize(int wHint, int hHint, boolean changed) {\r
- int width = 0;\r
- int height = 0;\r
- if (image != null && text != null) {\r
- GC gc = new GC(this);\r
- int textWidth = gc.stringExtent(text).x;\r
- int textHeight = gc.stringExtent(text).y;\r
- int imageWidth = image.getBounds().width;\r
- int imageHeight = image.getBounds().height;\r
- gc.dispose();\r
- if (imageWidth >= textWidth)\r
- {\r
- width = imageWidth + 2;\r
- }\r
- else\r
- {\r
- width = textWidth + 2;\r
- }\r
- height = textHeight + imageHeight + 7;\r
- } else if (image != null) {\r
- Rectangle bounds = image.getBounds();\r
- width = bounds.width + 2;\r
- height = bounds.height + 2;\r
- } else if (text != null) {\r
- GC gc = new GC(this);\r
- Point extent = gc.stringExtent(text);\r
- gc.dispose();\r
- width = extent.x + 2;\r
- height = extent.y + 2;\r
- }\r
- if (wHint != -1)\r
- {\r
- width = wHint;\r
- }\r
- if (hHint != -1)\r
- {\r
- height = hHint;\r
- }\r
-\r
- return new Point(width + 2, height + 2);\r
- }\r
-\r
- public boolean isSelected() {\r
- return selected;\r
- }\r
+ private Image image;\r
+ private String text;\r
+ private boolean selected;\r
+ private List<ImageClickedListener> imageClickedListeners = new ArrayList<ImageClickedListener>();\r
+\r
+ public PictureLabel(Composite parent, int style) {\r
+ super(parent, style);\r
+\r
+ // default background color\r
+ setBackground(getDisplay().getSystemColor(SWT.COLOR_WHITE));\r
+\r
+ // add listener\r
+ addDisposeListener(new DisposeListener() {\r
+ public void widgetDisposed(DisposeEvent e) {}\r
+ });\r
+ addPaintListener(new PaintListener() {\r
+ public void paintControl(PaintEvent e) {\r
+ PictureLabel.this.paintControl(e);\r
+ }\r
+ });\r
+ addMouseListener(new MouseAdapter() {\r
+ public void mouseDown(MouseEvent event) {\r
+ if (event.button == java.awt.event.MouseEvent.BUTTON1) {\r
+ PictureLabel.this.mouseDown(event);\r
+ }\r
+ }\r
+ });\r
+ addMouseTrackListener(new MouseTrackAdapter() {\r
+ public void mouseEnter(MouseEvent event) {\r
+ PictureLabel.this.mouseEnter(event);\r
+ }\r
+ public void mouseExit(MouseEvent event) {\r
+ PictureLabel.this.mouseExit(event);\r
+ }\r
+ });\r
+\r
+ setSelection(false);\r
+ }\r
+\r
+ public void mouseDown(MouseEvent event) {\r
+ ImageClickedEvent e = new ImageClickedEvent(this, event.x, event.y);\r
+ setSelection(!selected);\r
+ for (ImageClickedListener listener : imageClickedListeners) {\r
+ listener.imageClicked(e);\r
+ }\r
+ }\r
+\r
+ protected void mouseEnter(MouseEvent event) {\r
+ setBackground(getDisplay().getSystemColor(SWT.COLOR_WIDGET_LIGHT_SHADOW));\r
+ }\r
+\r
+ protected void mouseExit(MouseEvent event) {\r
+ setBackground(getDisplay().getSystemColor(selected ? SWT.COLOR_GRAY : SWT.COLOR_WHITE));\r
+ }\r
+\r
+ public void setSelection(boolean selected) {\r
+ this.selected = selected;\r
+ setBackground(getDisplay().getSystemColor(selected ? SWT.COLOR_GRAY : SWT.COLOR_WHITE));\r
+ }\r
+\r
+ public void addImageClickedListener(ImageClickedListener listener) {\r
+ imageClickedListeners.add(listener);\r
+ }\r
+\r
+ public void removeImageClickedListener(ImageClickedListener listener) {\r
+ imageClickedListeners.remove(listener);\r
+ }\r
+\r
+ void paintControl(PaintEvent e) {\r
+ GC gc = e.gc;\r
+ int x = 1;\r
+ int y = 1;\r
+ int clientAreaWidth = getClientArea().width;\r
+ int imageWidth = (image != null) ? image.getBounds().width : 0;\r
+ int imageHeght = (image != null) ? image.getBounds().height : 0;\r
+ int maxWidth = Math.max(Math.max(imageWidth, imageWidth), clientAreaWidth);\r
+\r
+ if ((image != null) & (text != null)) {\r
+ int textWidth = gc.stringExtent(text).x;\r
+ x = 1 + (maxWidth - imageWidth) / 2;\r
+ gc.drawImage(image, x, y);\r
+ y = y + imageHeght + 5;\r
+ x = 1 + (maxWidth - textWidth) / 2;\r
+ gc.drawText(text, x, y);\r
+ } else if (image != null) {\r
+ x = 1 + (maxWidth - imageWidth) / 2;\r
+ gc.drawImage(image, x, 1);\r
+ } else if (text != null) {\r
+ int textWidth = gc.stringExtent(text).x;\r
+ x = 1 + (maxWidth - textWidth) / 2;\r
+ gc.drawText(text, x, 1);\r
+ }\r
+ gc.dispose();\r
+ }\r
+\r
+ public Image getImage() {\r
+ return image;\r
+ }\r
+\r
+ public void setImage(Image image) {\r
+ this.image = image;\r
+ redraw();\r
+ }\r
+\r
+ public String getText() {\r
+ return text;\r
+ }\r
+\r
+ public void setText(String text) {\r
+ this.text = text;\r
+ redraw();\r
+ }\r
+\r
+ public Point computeSize(int wHint, int hHint, boolean changed) {\r
+ int width = 0;\r
+ int height = 0;\r
+ if (image != null && text != null) {\r
+ GC gc = new GC(this);\r
+ int textWidth = gc.stringExtent(text).x;\r
+ int textHeight = gc.stringExtent(text).y;\r
+ int imageWidth = image.getBounds().width;\r
+ int imageHeight = image.getBounds().height;\r
+ gc.dispose();\r
+ if (imageWidth >= textWidth)\r
+ {\r
+ width = imageWidth + 2;\r
+ }\r
+ else\r
+ {\r
+ width = textWidth + 2;\r
+ }\r
+ height = textHeight + imageHeight + 7;\r
+ } else if (image != null) {\r
+ Rectangle bounds = image.getBounds();\r
+ width = bounds.width + 2;\r
+ height = bounds.height + 2;\r
+ } else if (text != null) {\r
+ GC gc = new GC(this);\r
+ Point extent = gc.stringExtent(text);\r
+ gc.dispose();\r
+ width = extent.x + 2;\r
+ height = extent.y + 2;\r
+ }\r
+ if (wHint != -1)\r
+ {\r
+ width = wHint;\r
+ }\r
+ if (hHint != -1)\r
+ {\r
+ height = hHint;\r
+ }\r
+\r
+ return new Point(width + 2, height + 2);\r
+ }\r
+\r
+ public boolean isSelected() {\r
+ return selected;\r
+ }\r
}\r
\r
class ImageClickedEvent extends java.util.EventObject {\r
- \r
- private static final long serialVersionUID = 2923125560667763769L;\r
- \r
- public int x, y;\r
+ \r
+ private static final long serialVersionUID = 2923125560667763769L;\r
+ \r
+ public int x, y;\r
\r
- public ImageClickedEvent(Object source, int x, int y) {\r
- super(source);\r
+ public ImageClickedEvent(Object source, int x, int y) {\r
+ super(source);\r
\r
- this.x = x;\r
- this.y = y;\r
- }\r
+ this.x = x;\r
+ this.y = y;\r
+ }\r
}\r
\r
interface ImageClickedListener extends java.util.EventListener {\r
- public void imageClicked(ImageClickedEvent event);\r
+ public void imageClicked(ImageClickedEvent event);\r
}\r