TableRow.java
上传用户:hengxinggs
上传日期:2008-01-15
资源大小:212k
文件大小:5k
源码类别:

PlugIns编程

开发平台:

Java

  1. /*
  2.  * Copyright (C) 2005 David Orme <djo@coconut-palm-software.com>
  3.  * 
  4.  * All rights reserved. This program and the accompanying materials
  5.  * are made available under the terms of the Eclipse Public License v1.0
  6.  * which accompanies this distribution, and is available at
  7.  * http://www.eclipse.org/legal/epl-v10.html
  8.  *
  9.  * Contributors:
  10.  *     David Orme     - Initial API and implementation
  11.  */
  12. package org.eclipse.jface.examples.databinding.compositetable.internal;
  13. import org.eclipse.jface.examples.databinding.compositetable.InternalCompositeTable;
  14. import org.eclipse.swt.events.FocusAdapter;
  15. import org.eclipse.swt.events.FocusEvent;
  16. import org.eclipse.swt.events.FocusListener;
  17. import org.eclipse.swt.events.KeyAdapter;
  18. import org.eclipse.swt.events.KeyEvent;
  19. import org.eclipse.swt.events.KeyListener;
  20. import org.eclipse.swt.events.TraverseEvent;
  21. import org.eclipse.swt.events.TraverseListener;
  22. import org.eclipse.swt.widgets.Composite;
  23. import org.eclipse.swt.widgets.Control;
  24. /**
  25.  * Class TableRow.  Encapsulates operations on a SWT row control.  Discovers the 
  26.  * SWT controls inside the row control representing columns and exposes those for
  27.  * operations by the CompositeTable.  Listens to SWT events on the column controls
  28.  * and forwards them back to the table control for processing.
  29.  * 
  30.  * @author djo
  31.  */
  32. public class TableRow {
  33. private Control row;
  34. private Control[] columns;
  35. protected InternalCompositeTable parent;
  36. /**
  37.  * Constructor TableRow.  Construct a TableRow object.
  38.  * 
  39.  * @param parent The table containing this row.
  40.  * @param row The SWT control implementing this row.
  41.  */
  42. public TableRow(InternalCompositeTable parent, Control row) {
  43. this.parent = parent;
  44. this.row = row;
  45. if (row instanceof Composite) {
  46. Composite rowComposite = (Composite) row;
  47. columns = rowComposite.getTabList();
  48. } else {
  49. columns = new Control[] {row};
  50. }
  51. for (int i = 0; i < columns.length; i++) {
  52. addListeners(columns[i]);
  53. }
  54. }
  55. /**
  56.  * Remove all listeners from each control.
  57.  */
  58. public void dispose() {
  59. for (int i = 0; i < columns.length; i++) {
  60. removeListeners(columns[i]);
  61. }
  62. }
  63. /**
  64.  * Add listeners to each control.
  65.  * 
  66.  * @param control The control to listen to.
  67.  */
  68. private void addListeners(Control control) {
  69. control.addKeyListener(keyListener);
  70. control.addFocusListener(focusListener);
  71. control.addTraverseListener(traverseListener);
  72. }
  73. /**
  74.  * Remove listeners from each control.
  75.  * 
  76.  * @param control The control to no longer listen to.
  77.  */
  78. private void removeListeners(Control control) {
  79. control.removeKeyListener(keyListener);
  80. control.removeFocusListener(focusListener);
  81. control.removeTraverseListener(traverseListener);
  82. }
  83. /**
  84.  * Forward key presses to the parent control
  85.  */
  86. private KeyListener keyListener = new KeyAdapter() {
  87. public void keyPressed(KeyEvent e) {
  88. parent.keyPressed(TableRow.this, e);
  89. }
  90. };
  91. /**
  92.  * Forward focuse events to the parent control
  93.  */
  94. private FocusListener focusListener = new FocusAdapter() {
  95. public void focusLost(FocusEvent e) {
  96. parent.focusLost(TableRow.this, e);
  97. }
  98. public void focusGained(FocusEvent e) {
  99. parent.focusGained(TableRow.this, e);
  100. }
  101. };
  102. /**
  103.  * Forward traverse events to the parent control
  104.  */
  105. private TraverseListener traverseListener = new TraverseListener() {
  106. public void keyTraversed(TraverseEvent e) {
  107. parent.keyTraversed(TableRow.this, e);
  108. }
  109. };
  110. /**
  111.  * Return the SWT control implementing the row's GUI.
  112.  * 
  113.  * @return The row's SWT control
  114.  */
  115. public Control getRowControl() {
  116. return row;
  117. }
  118. /**
  119.  * Return the SWT control corresponding to a particular column within
  120.  * this row.
  121.  * 
  122.  * @param i the 0-based offset of the column to return.
  123.  * @return The corresponding control
  124.  */
  125. public Control getColumnControl(int i) {
  126. return columns[i];
  127. }
  128. /**
  129.  * Return the column number of a specified SWT control or -1 if not found.
  130.  * 
  131.  * @param control The control to find.
  132.  * @return control's column number or -1 if that column control is not in this row.
  133.  */
  134. public int getColumnNumber(Control control) {
  135. for (int i = 0; i < columns.length; i++) {
  136. if (columns[i] == control) {
  137. return i;
  138. }
  139. }
  140. return -1;
  141. }
  142. /**
  143.  * Return the number of columns in this row.
  144.  * 
  145.  * @return The number of columns in this row.
  146.  */
  147. public int getNumColumns() {
  148. return columns.length;
  149. }
  150. /**
  151.  * Sets the visibility of this row.
  152.  * 
  153.  * @param visible true if the row should be visible; false otherwise.
  154.  */
  155. public void setVisible(boolean visible) {
  156. row.setVisible(visible);
  157. }
  158. /**
  159.  * Returns if this row is visible.
  160.  * 
  161.  * @return true if the row is visible; false otherwise.
  162.  */
  163. public boolean getVisible() {
  164. return row.getVisible();
  165. }
  166. }