4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
\r
7 * Kangho Kim <kh5325.kim@samsung.com>
\r
9 * Licensed under the Apache License, Version 2.0 (the "License");
\r
10 * you may not use this file except in compliance with the License.
\r
11 * You may obtain a copy of the License at
\r
13 * http://www.apache.org/licenses/LICENSE-2.0
\r
15 * Unless required by applicable law or agreed to in writing, software
\r
16 * distributed under the License is distributed on an "AS IS" BASIS,
\r
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
18 * See the License for the specific language governing permissions and
\r
19 * limitations under the License.
\r
26 package org.tizen.common.swt;
\r
28 import java.util.List;
\r
29 import java.util.ArrayList;
\r
31 import org.eclipse.swt.*;
\r
32 import org.eclipse.swt.graphics.*;
\r
33 import org.eclipse.swt.widgets.*;
\r
34 import org.eclipse.swt.events.*;
\r
37 * Reference to http://www.eclipse.org/articles/Article-Writing%20Your%20Own%20Widget/Writing%20Your%20Own%20Widget.htm
\r
39 * @author Jihoon Song {@literal <jihoon80.song@samsung.com>} (S-Core)
\r
41 public class PictureLabel extends Canvas {
\r
42 private Image image;
\r
43 private String text;
\r
44 private boolean selected;
\r
45 private List<ImageClickedListener> imageClickedListeners = new ArrayList<ImageClickedListener>();
\r
47 public PictureLabel(Composite parent, int style) {
\r
48 super(parent, style);
\r
50 // default background color
\r
51 setBackground(getDisplay().getSystemColor(SWT.COLOR_WHITE));
\r
54 addDisposeListener(new DisposeListener() {
\r
55 public void widgetDisposed(DisposeEvent e) {}
\r
57 addPaintListener(new PaintListener() {
\r
58 public void paintControl(PaintEvent e) {
\r
59 PictureLabel.this.paintControl(e);
\r
62 addMouseListener(new MouseAdapter() {
\r
63 public void mouseDown(MouseEvent event) {
\r
64 if (event.button == java.awt.event.MouseEvent.BUTTON1) {
\r
65 PictureLabel.this.mouseDown(event);
\r
69 addMouseTrackListener(new MouseTrackAdapter() {
\r
70 public void mouseEnter(MouseEvent event) {
\r
71 PictureLabel.this.mouseEnter(event);
\r
73 public void mouseExit(MouseEvent event) {
\r
74 PictureLabel.this.mouseExit(event);
\r
78 setSelection(false);
\r
81 public void mouseDown(MouseEvent event) {
\r
82 ImageClickedEvent e = new ImageClickedEvent(this, event.x, event.y);
\r
83 setSelection(!selected);
\r
84 for (ImageClickedListener listener : imageClickedListeners) {
\r
85 listener.imageClicked(e);
\r
89 protected void mouseEnter(MouseEvent event) {
\r
90 setBackground(getDisplay().getSystemColor(SWT.COLOR_WIDGET_LIGHT_SHADOW));
\r
93 protected void mouseExit(MouseEvent event) {
\r
94 setBackground(getDisplay().getSystemColor(selected ? SWT.COLOR_GRAY : SWT.COLOR_WHITE));
\r
97 public void setSelection(boolean selected) {
\r
98 this.selected = selected;
\r
99 setBackground(getDisplay().getSystemColor(selected ? SWT.COLOR_GRAY : SWT.COLOR_WHITE));
\r
102 public void addImageClickedListener(ImageClickedListener listener) {
\r
103 imageClickedListeners.add(listener);
\r
106 public void removeImageClickedListener(ImageClickedListener listener) {
\r
107 imageClickedListeners.remove(listener);
\r
110 void paintControl(PaintEvent e) {
\r
114 int clientAreaWidth = getClientArea().width;
\r
115 int textWidth = gc.stringExtent(text).x;
\r
116 int imageWidth = image.getBounds().width;
\r
117 int imageHeght = image.getBounds().height;
\r
118 int maxWidth = Math.max(Math.max(imageWidth, imageWidth), clientAreaWidth);
\r
120 if ((image != null) & (text != null)) {
\r
121 x = 1 + (maxWidth - imageWidth) / 2;
\r
122 gc.drawImage(image, x, y);
\r
123 y = y + imageHeght + 5;
\r
124 x = 1 + (maxWidth - textWidth) / 2;
\r
125 gc.drawText(text, x, y);
\r
126 } else if (image != null) {
\r
127 x = 1 + (maxWidth - imageWidth) / 2;
\r
128 gc.drawImage(image, x, 1);
\r
129 } else if (text != null) {
\r
130 x = 1 + (maxWidth - textWidth) / 2;
\r
131 gc.drawText(text, x, 1);
\r
136 public Image getImage() {
\r
140 public void setImage(Image image) {
\r
141 this.image = image;
\r
145 public String getText() {
\r
149 public void setText(String text) {
\r
154 public Point computeSize(int wHint, int hHint, boolean changed) {
\r
157 if (image != null && text != null) {
\r
158 GC gc = new GC(this);
\r
159 int textWidth = gc.stringExtent(text).x;
\r
160 int textHeight = gc.stringExtent(text).y;
\r
161 int imageWidth = image.getBounds().width;
\r
162 int imageHeight = image.getBounds().height;
\r
164 if (imageWidth >= textWidth)
\r
165 width = imageWidth + 2;
\r
167 width = textWidth + 2;
\r
168 height = textHeight + imageHeight + 7;
\r
169 } else if (image != null) {
\r
170 Rectangle bounds = image.getBounds();
\r
171 width = bounds.width + 2;
\r
172 height = bounds.height + 2;
\r
173 } else if (text != null) {
\r
174 GC gc = new GC(this);
\r
175 Point extent = gc.stringExtent(text);
\r
177 width = extent.x + 2;
\r
178 height = extent.y + 2;
\r
185 return new Point(width + 2, height + 2);
\r
188 public boolean isSelected() {
\r
193 class ImageClickedEvent extends java.util.EventObject {
\r
196 public ImageClickedEvent(Object source, int x, int y) {
\r
204 interface ImageClickedListener extends java.util.EventListener {
\r
205 public void imageClicked(ImageClickedEvent event);
\r