1 /******************************************************************************* 2 * Copyright (c) 2018 Red Hat and others. 3 * 4 * This program and the accompanying materials 5 * are made available under the terms of the Eclipse Public License 2.0 6 * which accompanies this distribution, and is available at 7 * https://www.eclipse.org/legal/epl-2.0/ 8 * 9 * SPDX-License-Identifier: EPL-2.0 10 * 11 * Contributors: 12 * Red Hat - initial API and implementation 13 *******************************************************************************/ 14 package org.eclipse.swt.tests.gtk.snippets; 15 16 import org.eclipse.swt.SWT; 17 import org.eclipse.swt.graphics.Rectangle; 18 import org.eclipse.swt.layout.FillLayout; 19 import org.eclipse.swt.widgets.Button; 20 import org.eclipse.swt.widgets.Display; 21 import org.eclipse.swt.widgets.List; 22 import org.eclipse.swt.widgets.Shell; 23 import org.eclipse.swt.widgets.Table; 24 import org.eclipse.swt.widgets.TableItem; 25 import org.eclipse.swt.widgets.Tree; 26 import org.eclipse.swt.widgets.TreeItem; 27 28 public class Bug305864_ListItemHeight { 29 main(String[] args)30 public static void main(String[] args) { 31 testTree(); 32 testList(); 33 testTable(); 34 } 35 testTree()36 private static void testTree() { 37 final Display display = new Display(); 38 final Shell shell = new Shell(display); 39 FillLayout layout = new FillLayout(SWT.VERTICAL); 40 shell.setLayout(layout); 41 42 final Tree tree = new Tree(shell, SWT.BORDER); 43 44 for (int i=0; i<32; i++) { 45 TreeItem iItem = new TreeItem (tree, 0); 46 iItem.setText ("TreeItem (1) -" + (i+1)); 47 for (int j=0; j<4; j++) { 48 TreeItem jItem = new TreeItem (iItem, 0); 49 jItem.setText ("TreeItem (2) -" + (j+1)); 50 for (int k=0; k<4; k++) { 51 TreeItem kItem = new TreeItem (jItem, 0); 52 kItem.setText ("TreeItem (3) -" + (k+1)); 53 for (int l=0; l<4; l++) { 54 TreeItem lItem = new TreeItem (kItem, 0); 55 lItem.setText ("TreeItem (4) -" + (l+1)); 56 } 57 } 58 } 59 } 60 61 final Button button = new Button (shell, SWT.PUSH); 62 button.setText("Visible Items []"); 63 button.addListener(SWT.Selection, e -> { 64 Rectangle rect = tree.getClientArea(); 65 int itemHeight = tree.getItemHeight(); 66 double visibleCount = ((double) rect.height) / itemHeight; 67 button.setText("Visible Items [" + Math.round(visibleCount) + "]"); 68 }); 69 shell.setSize(200, 250); 70 shell.open(); 71 while (!shell.isDisposed()) { 72 if (!display.readAndDispatch()) { 73 display.sleep(); 74 } 75 } 76 display.dispose(); 77 78 79 } testList()80 private static void testList() { 81 final Display display = new Display(); 82 final Shell shell = new Shell(display); 83 FillLayout layout = new FillLayout(SWT.VERTICAL); 84 shell.setLayout(layout); 85 86 final List list = new List(shell, SWT.BORDER | SWT.SINGLE | SWT.V_SCROLL); 87 list.setData("name", "list"); 88 89 for (int i = 0; i < 100; i++) { 90 list.add("Item " + (i + 1) + " is quite long"); 91 } 92 93 final Button button = new Button (shell, SWT.PUSH); 94 button.setText("Visible Items []"); 95 button.addListener(SWT.Selection, e -> { 96 Rectangle rect = list.getClientArea(); 97 int itemHeight = list.getItemHeight(); 98 double visibleCount = ((double) rect.height) / itemHeight; 99 button.setText("Visible Items [" + Math.round(visibleCount) + "]"); 100 }); 101 shell.setSize(200, 250); 102 shell.open(); 103 while (!shell.isDisposed()) { 104 if (!display.readAndDispatch()) { 105 display.sleep(); 106 } 107 } 108 display.dispose(); 109 } 110 testTable()111 private static void testTable() { 112 final Display display = new Display(); 113 final Shell shell = new Shell(display); 114 FillLayout layout = new FillLayout(SWT.VERTICAL); 115 shell.setLayout(layout); 116 final Table table = new Table(shell, SWT.NONE); 117 for (int i = 0; i < 32; i++) { 118 TableItem item = new TableItem(table, SWT.NONE); 119 item.setText("Item " + (i + 1) + " is quite long"); 120 } 121 final Button button = new Button (shell, SWT.PUSH); 122 button.setText("Visible Items []"); 123 button.addListener(SWT.Selection, e -> { 124 Rectangle rect = table.getClientArea(); 125 int itemHeight = table.getItemHeight(); 126 int headerHeight = table.getHeaderHeight(); 127 double visibleCount = ((double) (rect.height - headerHeight)) / itemHeight; 128 button.setText("Visible Items [" + Math.round(visibleCount) + "]"); 129 }); 130 shell.setSize(200, 250); 131 shell.open(); 132 while (!shell.isDisposed()) { 133 if (!display.readAndDispatch()) { 134 display.sleep(); 135 } 136 } 137 display.dispose(); 138 } 139 140 } 141