From 976401b01e993a361e144d63317bbfdbac371bbd Mon Sep 17 00:00:00 2001 From: "ho.namkoong" Date: Fri, 17 Aug 2012 15:59:21 +0900 Subject: [PATCH] [Title] Add table tooltip listener [Type] feature [Module] [Priority] [Jira#] [Redmine#] 6447 [Problem] [Cause] [Solution] [TestCase] Change-Id: Id771134dff28c14de390f9d59693651934a856c4 --- .../org/tizen/common/ui/TableToolTipListener.java | 145 +++++++++++++++++++++ 1 file changed, 145 insertions(+) create mode 100644 org.tizen.common/src/org/tizen/common/ui/TableToolTipListener.java diff --git a/org.tizen.common/src/org/tizen/common/ui/TableToolTipListener.java b/org.tizen.common/src/org/tizen/common/ui/TableToolTipListener.java new file mode 100644 index 0000000..6b71bff --- /dev/null +++ b/org.tizen.common/src/org/tizen/common/ui/TableToolTipListener.java @@ -0,0 +1,145 @@ +/* +* Common +* +* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. +* +* Contact: +* Ho Namkoong +* +* Licensed 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. +* +* Contributors: +* - S-Core Co., Ltd +* +*/ + +package org.tizen.common.ui; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.Point; +import org.eclipse.swt.graphics.Rectangle; +import org.eclipse.swt.layout.FillLayout; +import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Listener; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.swt.widgets.Table; +import org.eclipse.swt.widgets.TableItem; +import org.tizen.common.util.SWTUtil; + +/** + * TableToolTipListener + * + * Add tool tip to the table + * + * @author Ho Namkoong{@literal } (S-Core) + */ +public abstract class TableToolTipListener implements Listener{ + + private Shell tip = null; + private Label label = null; + private Table table = null; + + /** + * Gets tooltip text from tableitem. + * + * @param item table item from which tooltip text is extracted. + * @return tooltip text + */ + protected abstract String getLabelText(TableItem item); + + /** + * Constructor with target table + * + * @param table will be added listener. + */ + public TableToolTipListener (Table table) { + this.table = table; + this.addListners(); + } + + private void addListners() { + this.table.addListener(SWT.MouseMove, this); + this.table.addListener(SWT.MouseWheel, this); + this.table.addListener(SWT.Dispose, this); + this.table.addListener(SWT.MouseHover, this); + } + + @Override + public void handleEvent(Event event) { + int eventType = event.type; + + if(SWT.MouseMove == eventType || SWT.MouseWheel == eventType || SWT.Dispose == eventType) { + if(label != null) { + label.dispose(); + label = null; + return; + } +// if(tip != null) { +// tip.dispose(); +// tip = null; +// label = null; +// return; +// } + } + if(SWT.MouseHover == eventType) { + TableItem item = this.table.getItem(new Point(event.x, event.y)); + if(item != null) { + if(tip != null && !tip.isDisposed()) { + tip.dispose(); + } + tip = new Shell(SWTUtil.getActiveShell(), SWT.ON_TOP | SWT.TOOL); + tip.setLayout(new FillLayout()); + + label = new Label(tip, SWT.None); + label.setText(this.getLabelText(item)); + label.setData(item); + + label.addListener(SWT.MouseExit, labelListener); + label.addListener(SWT.MouseDown, labelListener); + label.addListener(SWT.MouseWheel, labelListener); + + Point size = tip.computeSize(SWT.DEFAULT, SWT.DEFAULT); + Rectangle rect = item.getBounds(0); + Point pt = this.table.toDisplay(rect.x, rect.y); + tip.setBounds(pt.x, pt.y, size.x, size.y); + tip.setVisible(true); + } + } + } + + final private Listener labelListener = new Listener() { + + @Override + public void handleEvent(Event event) { + Label label = (Label)event.widget; + Shell shell = label.getShell(); + + int eventType = event.type; + if(SWT.MouseDown == eventType) { + if(table != null) { + Event e = new Event(); + e.item = (TableItem) label.getData(); + + table.setSelection((TableItem)e.item); + table.notifyListeners(SWT.Selection, e); + } + return; + } + if(SWT.MouseExit == eventType || SWT.MouseWheel == eventType) { + shell.dispose(); + return; + } + } + }; +} -- 2.7.4