1765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye/******************************************************************************* 2765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Copyright (c) 2011 Google, Inc. 3765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * All rights reserved. This program and the accompanying materials 4765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * are made available under the terms of the Eclipse Public License v1.0 5765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * which accompanies this distribution, and is available at 6765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * http://www.eclipse.org/legal/epl-v10.html 7765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * 8765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Contributors: 9765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Google, Inc. - initial API and implementation 10765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye *******************************************************************************/ 11765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyepackage org.eclipse.wb.core.controls; 12765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 13765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.wb.draw2d.IColorConstants; 14765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.wb.internal.core.model.property.table.PropertyTable; 15765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.wb.internal.core.utils.binding.editors.controls.DefaultControlActionsManager; 16765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 17765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.swt.SWT; 18765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.swt.events.SelectionListener; 19765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.swt.graphics.Image; 20765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.swt.graphics.Point; 21765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.swt.graphics.Rectangle; 22765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.swt.layout.FillLayout; 23765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.swt.widgets.Button; 24765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.swt.widgets.Composite; 25765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.swt.widgets.Event; 26765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.swt.widgets.Listener; 27765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.swt.widgets.Shell; 28765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.swt.widgets.Table; 29765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.swt.widgets.TableColumn; 30765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.swt.widgets.TableItem; 31765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.swt.widgets.TypedListener; 32765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.swt.widgets.Widget; 33765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 34765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye/** 35765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Combo control for {@link PropertyTable} and combo property editors. 36765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * 37765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * @author scheglov_ke 38765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * @coverage core.control 39765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 40765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyepublic class CCombo3 extends Composite { 41765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye private final long m_createTime = System.currentTimeMillis(); 42765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye private final CImageLabel m_text; 43765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye private final Button m_arrow; 44765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye private final Shell m_popup; 45765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye private final Table m_table; 46765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye private boolean m_fullDropdownTableSize = false; 47765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 48765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 49765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 50765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // Constructor 51765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 52765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 53765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public CCombo3(Composite parent, int style) { 54765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye super(parent, style); 55765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye addEvents(this, m_comboListener, new int[]{SWT.Dispose, SWT.Move, SWT.Resize}); 56765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // create label 57765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye { 58765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye m_text = new CImageLabel(this, SWT.NONE); 59765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye new DefaultControlActionsManager(m_text); 60765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye addEvents(m_text, m_textListener, new int[]{ 61765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye SWT.KeyDown, 62765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye SWT.KeyUp, 63765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye SWT.MouseDown, 64765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye SWT.MouseUp, 65765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye SWT.MouseMove, 66765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye SWT.MouseDoubleClick, 67765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye SWT.Traverse, 68765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye SWT.FocusIn, 69765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye SWT.FocusOut}); 70765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 71765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // create arrow 72765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye { 73765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye m_arrow = new Button(this, SWT.ARROW | SWT.DOWN); 74765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye addEvents(m_arrow, m_arrowListener, new int[]{SWT.Selection, SWT.FocusIn, SWT.FocusOut}); 75765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 76765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // create popup Shell 77765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye { 78765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye Shell shell = getShell(); 79765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye m_popup = new Shell(shell, SWT.NONE); 80765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye m_popup.setLayout(new FillLayout()); 81765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 82765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // create table for items 83765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye { 84765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye m_table = new Table(m_popup, SWT.FULL_SELECTION); 85765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye addEvents(m_table, m_tableListener, new int[]{SWT.Selection, SWT.FocusIn, SWT.FocusOut}); 86765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 87765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye new TableColumn(m_table, SWT.NONE); 88765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 89765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // Focus tracking filter 90765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye { 91765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye final Listener filter = new Listener() { 92765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye private boolean hasFocus; 93765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 94765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public void handleEvent(Event event) { 95765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye boolean old_hasFocus = hasFocus; 96765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye hasFocus = 97765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye m_text.isFocusControl() 98765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye || m_arrow.isFocusControl() 99765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye || m_popup.isFocusControl() 100765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye || m_table.isFocusControl(); 101765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // configure colors 102765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye if (hasFocus) { 103765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye m_text.setBackground(IColorConstants.listSelection); 104765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye m_text.setForeground(IColorConstants.listSelectionText); 105765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } else { 106765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye m_text.setBackground(IColorConstants.listBackground); 107765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye m_text.setForeground(IColorConstants.listForeground); 108765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 109765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // send FocusOut event 110765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye if (old_hasFocus && !hasFocus) { 111765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye Event e = new Event(); 112765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye e.widget = CCombo3.this; 113765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye e.time = event.time; 114765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye notifyListeners(SWT.FocusOut, e); 115765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 116765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 117765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye }; 118765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye getDisplay().addFilter(SWT.FocusIn, filter); 119765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye addListener(SWT.Dispose, new Listener() { 120765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public void handleEvent(Event event) { 121765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye getDisplay().removeFilter(SWT.FocusIn, filter); 122765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 123765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye }); 124765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 125765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 126765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 127765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 128765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 129765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // Events handling 130765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 131765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 132765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye private final Listener m_comboListener = new Listener() { 133765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public void handleEvent(Event event) { 134765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye switch (event.type) { 135765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye case SWT.Dispose : 136765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye if (!m_popup.isDisposed()) { 137765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye m_popup.dispose(); 138765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 139765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye break; 140765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye case SWT.Move : 141765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye doDropDown(false); 142765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye break; 143765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye case SWT.Resize : 144765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye doResize(); 145765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye break; 146765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 147765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 148765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye }; 149765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye private final Listener m_textListener = new Listener() { 150765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public void handleEvent(final Event event) { 151765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye switch (event.type) { 152765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye case SWT.MouseDown : 153765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye if (System.currentTimeMillis() - m_createTime < 400) { 154765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // send "logical" double click for case when we just activated combo 155765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // and almost right away click second time (but first time on editor) 156765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye event.detail = -1; 157765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye notifyListeners(SWT.MouseDoubleClick, event); 158765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // when we use "auto drop on editor activation" option, this click is 159765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // is "logically" second one, so it should close combo 160765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye if (!isDisposed()) { 161765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye doDropDown(false); 162765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 163765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } else { 164765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye m_text.setCapture(true); 165765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye doDropDown(!isDropped()); 166765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 167765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye break; 168765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye case SWT.MouseUp : { 169765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye m_text.setCapture(false); 170765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye TableItem item = getItemUnderCursor(event); 171765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye if (item != null) { 172765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye doDropDown(false); 173765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye sendSelectionEvent(event); 174765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 175765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye break; 176765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 177765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye case SWT.MouseDoubleClick : 178765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // prevent resending MouseDoubleClick that we sent on fast MouseDown 179765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye if (event.detail != -1) { 180765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye notifyListeners(SWT.MouseDoubleClick, event); 181765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 182765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye break; 183765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye case SWT.MouseMove : { 184765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye TableItem item = getItemUnderCursor(event); 185765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye if (item != null) { 186765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye m_table.setSelection(new TableItem[]{item}); 187765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 188765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye break; 189765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 190765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye case SWT.KeyDown : { 191765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // check for keyboard navigation and selection 192765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye { 193765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye int selectionIndex = m_table.getSelectionIndex(); 194765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye if (event.keyCode == SWT.ARROW_UP) { 195765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye selectionIndex--; 196765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye if (selectionIndex < 0) { 197765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye selectionIndex = m_table.getItemCount() - 1; 198765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 199765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye m_table.setSelection(selectionIndex); 200765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return; 201765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } else if (event.keyCode == SWT.ARROW_DOWN) { 202765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye m_table.setSelection((selectionIndex + 1) % m_table.getItemCount()); 203765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return; 204765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } else if (event.character == SWT.CR || event.character == ' ') { 205765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye sendSelectionEvent(event); 206765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return; 207765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 208765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 209765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // be default just resend event 210765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye resendKeyEvent(event); 211765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye break; 212765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 213765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye case SWT.KeyUp : 214765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye resendKeyEvent(event); 215765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye break; 216765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 217765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 218765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 219765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye private TableItem getItemUnderCursor(Event event) { 220765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye Point displayLocation = m_text.toDisplay(new Point(event.x, event.y)); 221765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye Point tableLocation = m_table.toControl(displayLocation); 222765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return m_table.getItem(tableLocation); 223765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 224765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye }; 225765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye private final Listener m_arrowListener = new Listener() { 226765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public void handleEvent(Event event) { 227765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye switch (event.type) { 228765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye /*case SWT.FocusIn : { 229765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye resendFocusEvent(event); 230765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye break; 231765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye }*/ 232765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye case SWT.Selection : { 233765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye doDropDown(!isDropped()); 234765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye break; 235765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 236765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 237765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 238765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye }; 239765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye private final Listener m_tableListener = new Listener() { 240765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public void handleEvent(Event event) { 241765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye switch (event.type) { 242765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye case SWT.Selection : { 243765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye doDropDown(false); 244765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // show selected item in text 245765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye { 246765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye int index = m_table.getSelectionIndex(); 247765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye select(index); 248765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 249765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // send selection event 250765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye sendSelectionEvent(event); 251765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye break; 252765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 253765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 254765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 255765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye }; 256765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 257765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 258765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 259765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // Events utils 260765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 261765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 262765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye /** 263765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Sends selection event. 264765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 265765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye private void sendSelectionEvent(Event event) { 266765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye Event e = new Event(); 267765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye e.time = event.time; 268765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye e.stateMask = event.stateMask; 269765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye notifyListeners(SWT.Selection, e); 270765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 271765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 272765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye /** 273765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Resends KeyDown/KeyUp events. 274765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 275765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye private void resendKeyEvent(Event event) { 276765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye Event e = new Event(); 277765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye e.time = event.time; 278765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye e.character = event.character; 279765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye e.keyCode = event.keyCode; 280765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye e.stateMask = event.stateMask; 281765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye notifyListeners(event.type, e); 282765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 283765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 284765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye /** 285765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Adds given listener as handler for events in given widget. 286765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 287765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye private void addEvents(Widget widget, Listener listener, int[] events) { 288765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye for (int i = 0; i < events.length; i++) { 289765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye widget.addListener(events[i], listener); 290765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 291765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 292765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 293765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye /** 294765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Adds the listener to receive events. 295765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 296765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public void addSelectionListener(SelectionListener listener) { 297765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye checkWidget(); 298765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye if (listener == null) { 299765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye SWT.error(SWT.ERROR_NULL_ARGUMENT); 300765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 301765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye TypedListener typedListener = new TypedListener(listener); 302765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye addListener(SWT.Selection, typedListener); 303765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye addListener(SWT.DefaultSelection, typedListener); 304765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 305765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 306765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 307765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 308765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // Activity 309765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 310765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 311765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye /** 312765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Sets drop state of combo. 313765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 314765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public void doDropDown(boolean drop) { 315765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // check, may be we already in this drop state 316765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye if (drop == isDropped()) { 317765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return; 318765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 319765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // close combo 320765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye if (!drop) { 321765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye m_popup.setVisible(false); 322765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye m_text.setFocus(); 323765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return; 324765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 325765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // open combo 326765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye { 327765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // prepare popup location 328765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye Point comboSize = getSize(); 329765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye Point popupLocation; 330765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye { 331765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //popupLocation = getParent().toDisplay(getLocation()); 332765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye popupLocation = toDisplay(new Point(0, 0)); 333765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye popupLocation.y += comboSize.y; 334765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 335765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // calculate and set popup location 336765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye { 337765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye TableColumn tableColumn = m_table.getColumn(0); 338765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // pack everything 339765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye tableColumn.pack(); 340765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye m_table.pack(); 341765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye m_popup.pack(); 342765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // calculate bounds 343765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye Rectangle tableBounds = m_table.getBounds(); 344765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye tableBounds.height = Math.min(tableBounds.height, m_table.getItemHeight() * 20); // max 20 items without scrolling 345765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye m_table.setBounds(tableBounds); 346765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // calculate size 347765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye int remainingDisplayHeight = getDisplay().getClientArea().height - popupLocation.y - 10; 348765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye int preferredHeight = Math.min(tableBounds.height, remainingDisplayHeight); 349765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye int remainingDisplayWidth = getDisplay().getClientArea().width - popupLocation.x - 5; 350765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye int preferredWidth = 351765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye isFullDropdownTableWidth() 352765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye ? Math.min(tableBounds.width, remainingDisplayWidth) 353765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye : comboSize.x; 354765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // set popup bounds calculated as computeTrim basing on combo width and table height paying attention on remaining display space 355765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye Rectangle popupBounds = 356765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye m_popup.computeTrim(popupLocation.x, popupLocation.y, preferredWidth, preferredHeight); 357765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye m_popup.setBounds(popupBounds); 358765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // adjust column size 359765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye tableColumn.setWidth(m_table.getClientArea().width); 360765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 361765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye m_popup.setVisible(true); 362765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // scroll to selection if needed 363765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye m_table.showSelection(); 364765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 365765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 366765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 367765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye /** 368765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Initiates "press-hold-drag" sequence. 369765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 370765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public void startDrag() { 371765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye m_text.setCapture(true); 372765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 373765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 374765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 375765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 376765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // Access 377765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 378765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 379765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public void setFullDropdownTableWidth(boolean freeTableSize) { 380765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye m_fullDropdownTableSize = freeTableSize; 381765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 382765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 383765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public boolean isFullDropdownTableWidth() { 384765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return m_fullDropdownTableSize; 385765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 386765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 387765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public boolean isDropped() { 388765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return m_popup.isVisible(); 389765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 390765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 391765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public void setQuickSearch(boolean value) { 392765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // TODO 393765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 394765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 395765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 396765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 397765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // Access: items 398765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 399765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 400765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye /** 401765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Removes all items. 402765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 403765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public void removeAll() { 404765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye TableItem[] items = m_table.getItems(); 405765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye for (int index = 0; index < items.length; index++) { 406765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye TableItem item = items[index]; 407765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye item.dispose(); 408765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 409765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 410765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 411765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye /** 412765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Adds new item with given text. 413765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 414765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public void add(String text) { 415765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye add(text, null); 416765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 417765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 418765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye /** 419765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Adds new item with given text and image. 420765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 421765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public void add(String text, Image image) { 422765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye checkWidget(); 423765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye TableItem item = new TableItem(m_table, SWT.NONE); 424765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye item.setText(text); 425765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye item.setImage(image); 426765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 427765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 428765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye /** 429765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * @return an item at given index 430765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 431765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public String getItem(int index) { 432765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye checkWidget(); 433765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return m_table.getItem(index).getText(); 434765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 435765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 436765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye /** 437765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * @return the number of items 438765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 439765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public int getItemCount() { 440765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye checkWidget(); 441765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return m_table.getItemCount(); 442765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 443765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 444765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye /** 445765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * @return the index of the selected item 446765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 447765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public int getSelectionIndex() { 448765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye checkWidget(); 449765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return m_table.getSelectionIndex(); 450765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 451765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 452765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye /** 453765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Selects an item with given index. 454765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 455765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public void select(int index) { 456765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye checkWidget(); 457765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye if (index == -1) { 458765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye m_table.deselectAll(); 459765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye m_text.setText(null); 460765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye m_text.setImage(null); 461765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return; 462765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } else { 463765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye TableItem item = m_table.getItem(index); 464765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye m_text.setText(item.getText()); 465765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye m_text.setImage(item.getImage()); 466765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye m_table.select(index); 467765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 468765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 469765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 470765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 471765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 472765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // Access: text and image 473765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 474765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 475765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye /** 476765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Selects item with given text. 477765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 478765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public void setText(String text) { 479765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // try to find item with given text 480765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye TableItem[] items = m_table.getItems(); 481765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye for (int index = 0; index < items.length; index++) { 482765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye TableItem item = items[index]; 483765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye if (item.getText().equals(text)) { 484765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye select(index); 485765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return; 486765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 487765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 488765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // not found, remove selection 489765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye select(-1); 490765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 491765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 492765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 493765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 494765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // Resize support 495765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // TODO: computeSize 496765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 497765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 498765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye protected void doResize() { 499765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye Rectangle clientArea = getClientArea(); 500765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye int areaWidth = clientArea.width; 501765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye int areaHeight = clientArea.height; 502765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // compute sizes of controls 503765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye Point buttonSize = m_arrow.computeSize(areaHeight, areaHeight); 504765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye Point textSize = m_text.computeSize(areaWidth - buttonSize.x, areaHeight); 505765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // set controls location/size 506765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye m_arrow.setLocation(areaWidth - buttonSize.x, 0); 507765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye m_arrow.setSize(buttonSize); 508765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye m_text.setSize(areaWidth - buttonSize.x, Math.max(textSize.y, areaHeight)); 509765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 510765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye} 511