]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.utils.ui/testcases/org/simantics/utils/ui/SWTAWTTest.java
Use searchByTypeShallow in ModelingUtils.createMissingGUIDs
[simantics/platform.git] / bundles / org.simantics.utils.ui / testcases / org / simantics / utils / ui / SWTAWTTest.java
1 /*******************************************************************************
2  * Copyright (c) 2013 Association for Decentralized Information Management
3  * in Industry THTH ry.
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  *     Semantum Oy - testcase for Simantics issue #3518 workaround
11  *******************************************************************************/
12 package org.simantics.utils.ui;
13
14 import java.awt.Frame;
15 import java.awt.event.WindowAdapter;
16 import java.awt.event.WindowEvent;
17 import java.lang.reflect.InvocationTargetException;
18 import java.lang.reflect.Method;
19 import java.util.Vector;
20
21 import javax.swing.JComponent;
22 import javax.swing.JScrollPane;
23 import javax.swing.JTable;
24 import javax.swing.SwingUtilities;
25
26 import org.eclipse.swt.SWT;
27 import org.eclipse.swt.awt.SWT_AWT;
28 import org.eclipse.swt.custom.CTabFolder;
29 import org.eclipse.swt.custom.CTabItem;
30 import org.eclipse.swt.layout.FillLayout;
31 import org.eclipse.swt.widgets.Composite;
32 import org.eclipse.swt.widgets.Control;
33 import org.eclipse.swt.widgets.Display;
34 import org.eclipse.swt.widgets.Event;
35 import org.eclipse.swt.widgets.Listener;
36 import org.eclipse.swt.widgets.Shell;
37 import org.eclipse.swt.widgets.TabFolder;
38 import org.eclipse.swt.widgets.TabItem;
39
40 /**
41  * See Eclipse bug 377104 (https://bugs.eclipse.org/bugs/show_bug.cgi?id=377104)
42  * for original patches and ideas for this testcase.
43  */
44 public class SWTAWTTest {
45
46         public static void main(String[] args) {
47                 final Display display = Display.getDefault();
48
49                 tryCTabFolder();
50                 tryTabFolder();
51                 trySideBySide();
52
53                 display.addFilter(SWT.Activate, new Listener() {                        
54                         @Override
55                         public void handleEvent(Event event) {
56                                 System.out.println("SWT.Activate: " + event.widget + " (" + System.identityHashCode(event.widget) + ")");
57                         }
58                 });
59
60                 while (!display.isDisposed()) {
61                         if (!display.readAndDispatch()) {
62                                 display.sleep();
63                                 System.out.print(".");
64                         }
65                 }
66         }
67
68         private static void tryTabFolder() {
69                 Shell shell = new Shell();
70                 shell.setText("TabFolder");
71                 shell.setLayout(new FillLayout());
72                 TabFolder folder = new TabFolder(shell, SWT.NONE);
73                 for (int i = 0; i < 2; i++) {
74                         TabItem item = new TabItem(folder, SWT.NONE);
75                         item.setText("#" + i);
76                         item.setControl(openTable(folder));
77                 }
78                 folder.setSelection(0);
79
80                 folder = new TabFolder(shell, SWT.NONE);
81                 for (int i = 0; i < 2; i++) {
82                         TabItem item = new TabItem(folder, SWT.NONE);
83                         item.setText("#" + i);
84                         item.setControl(openTable(folder));
85                 }
86                 folder.setSelection(0);
87                 shell.open();
88         }
89
90         private static void tryCTabFolder() {
91                 Shell shell = new Shell();
92                 shell.setText("CTabFolder");
93                 shell.setLayout(new FillLayout());
94                 CTabFolder folder = new CTabFolder(shell, SWT.NONE);
95                 for (int i = 0; i < 2; i++) {
96                         CTabItem item = new CTabItem(folder, SWT.NONE);
97                         item.setText("#" + i);
98                         item.setControl(openTable(folder));
99                 }
100                 folder.setSelection(0);
101
102                 folder = new CTabFolder(shell, SWT.NONE);
103                 for (int i = 0; i < 2; i++) {
104                         CTabItem item = new CTabItem(folder, SWT.NONE);
105                         item.setText("#" + i);
106                         item.setControl(openTable(folder));
107                 }
108                 folder.setSelection(0);
109                 shell.open();
110         }
111
112         private static void trySideBySide() {
113                 Shell shell = new Shell();
114                 shell.setText("Side by Side (FillLayout)");
115                 shell.setLayout(new FillLayout());
116                 openTable(shell);
117                 openTable(shell);
118                 shell.open();
119         }
120
121         private static Control openTable(Composite outer) {
122                 final Composite parent = new Composite(outer, SWT.EMBEDDED);
123                 final Frame frame = SWT_AWT.new_Frame(parent);
124                 final Display display = outer.getDisplay();
125
126                 String ver = System.getProperty("java.version");
127                 if (ver.startsWith("1.7") || ver.startsWith("1.8"))
128                 {
129                         frame.addWindowListener(new WindowAdapter()
130                         {
131                                 @Override
132                                 public void windowActivated(WindowEvent e)
133                                 {
134                                         display.asyncExec(new Runnable()
135                                         {
136                                                 @Override
137                                                 public void run()
138                                                 {
139                                                         if (display.getFocusControl() == parent)
140                                                         {
141                                                                 try {
142                                                                         Method m = Shell.class.getDeclaredMethod("setActiveControl", Control.class);
143                                                                         boolean accessible = m.isAccessible();
144                                                                         if (!accessible)
145                                                                                 m.setAccessible(true);
146                                                                         m.invoke(parent.getShell(), parent);
147                                                                         if (!accessible)
148                                                                                 m.setAccessible(false);
149                                                                 } catch (SecurityException e) {
150                                                                         e.printStackTrace();
151                                                                 } catch (NoSuchMethodException e) {
152                                                                         e.printStackTrace();
153                                                                 } catch (IllegalArgumentException e) {
154                                                                         e.printStackTrace();
155                                                                 } catch (IllegalAccessException e) {
156                                                                         e.printStackTrace();
157                                                                 } catch (InvocationTargetException e) {
158                                                                         e.getCause().printStackTrace();
159                                                                 }
160                                                         }
161                                                 }
162                                         });
163                                 }
164                         });
165                 }
166
167                 SwingUtilities.invokeLater(new Runnable() {
168                         public void run() {
169                                 //final InputContext input = frame.getInputContext();
170                                 frame.add(createTable());
171
172                         }
173                 });
174                 return parent;
175         }
176
177         private static JComponent createTable() {
178                 /* Creating components */
179                 int nrows = 1000, ncolumns = 10;
180                 Vector<Object> rows = new Vector<Object>();
181                 for (int i = 0; i < nrows; i++) {
182                         Vector<Object> row = new Vector<Object>();
183                         for (int j = 0; j < ncolumns; j++) {
184                                 row.addElement("Item " + i + "-" + j);
185                         }
186                         rows.addElement(row);
187                 }
188                 Vector<Object> columns = new Vector<Object>();
189                 for (int i = 0; i < ncolumns; i++) {
190                         columns.addElement("Column " + i);
191                 }
192                 JTable table = new JTable(rows, columns);
193                 table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
194                 table.createDefaultColumnsFromModel();
195                 JScrollPane scrollPane = new JScrollPane(table);
196                 return scrollPane;
197         }
198
199 }