/* XOWA: the XOWA Offline Wiki Application Copyright (C) 2012 gnosygnu@gmail.com This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.gfui; import gplx.Byte_ascii; import gplx.String_; import org.eclipse.swt.*; import org.eclipse.swt.browser.*; import org.eclipse.swt.custom.*; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.events.KeyListener; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.MouseListener; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.graphics.*; import org.eclipse.swt.layout.*; import org.eclipse.swt.widgets.*; public class Swt_app_main { public static void main(String[] args) { // Drag_drop(); // List_fonts(); keystrokes(args); // Permission_denied(); // Combo_default(); // Combo_composite(); } static void Drag_drop() { final Display display = new Display(); final Shell shell = new Shell(display); shell.setLayout(new GridLayout()); final CTabFolder folder = new CTabFolder(shell, SWT.BORDER); folder.setLayoutData(new GridData(GridData.FILL_BOTH)); for (int i = 0; i < 10; i++) { CTabItem item = new CTabItem(folder, SWT.NONE); item.setText("item "+i); Text text = new Text(folder, SWT.BORDER | SWT.MULTI | SWT.VERTICAL); text.setText("Text control for "+i); item.setControl(text); if (i == 9) { item.setShowClose(false); item.setText("+"); // item.setImage(new Image(Display.getDefault(), "J:\\gplx\\xowa\\user\\anonymous\\app\\img\\edit\\format-bold-A.png")); } } ToolBar t = new ToolBar( folder, SWT.FLAT ); ToolItem i = new ToolItem( t, SWT.PUSH ); i.setText( "add" ); folder.setTopRight( t, SWT.RIGHT ); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); } static void keystrokes(String[] args) { Display display = new Display (); final Shell shell = new Shell (display); // display.addFilter(SWT.KeyDown, new Listener() { // // public void handleEvent(Event e) { // if(((e.stateMask & SWT.CTRL) == SWT.CTRL) && (e.keyCode == 'f')) // { // System.out.println("From Display I am the Key down !!" + e.keyCode); // } // } // }); shell.addKeyListener(new KeyListener() { public void keyReleased(KeyEvent e) { // if(((e.stateMask & SWT.CTRL) == SWT.CTRL) && (e.keyCode == 'f')) // { // shell.setBackground(orig); // System.out.println("Key up !!"); // } System.out.println(e.stateMask + " " + e.keyCode); } public void keyPressed(KeyEvent e) { // System.out.println(e.stateMask + " " + e.keyCode); } }); shell.addMouseListener(new MouseListener() { @Override public void mouseUp(MouseEvent arg0) { // TODO Auto-generated method stub System.out.println(arg0.button); } @Override public void mouseDown(MouseEvent arg0) { // TODO Auto-generated method stub } @Override public void mouseDoubleClick(MouseEvent arg0) { // TODO Auto-generated method stub } }); shell.setSize (200, 200); shell.open (); while (!shell.isDisposed()) { if (!display.readAndDispatch ()) display.sleep (); } display.dispose (); } static void List_fonts() { java.awt.GraphicsEnvironment e = java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(); java.awt.Font[] fonts = e.getAllFonts(); // Get the fonts for (java.awt.Font f : fonts) { System.out.println(f.getFontName()); } } static void Permission_denied() { String html = "\n" + "\n" + "\n" + "\n" + "\n" + " click to call permissionDeniedExample -> will throw error and not show sel.rangeCount
\n" + " click to call permissionDeniedExample inside a setTimeout -> will show sel.rangeCount
\n" + "\n" + "\n" ; System.setProperty ( "org.eclipse.swt.browser.XULRunnerPath" // ADJUST THIS PATH AS NECESSARY ON YOUR MACHINE , "C:\\xowa\\bin\\windows\\xulrunner" ); Display display = new Display(); Shell shell = new Shell(display); shell.setLayout(new FillLayout()); final Browser browser; try { browser = new Browser(shell, SWT.MOZILLA); // changed from none browser.addLocationListener(new LocationListener() { @Override public void changing(LocationEvent arg0) { if (arg0.location.equals("about:blank")) return; arg0.doit = false; } @Override public void changed(LocationEvent arg0) { String location = arg0.location; if (location.equals("about:blank")) return; // build code String code = "alert('unknown_link:" + location + "')"; if (location.contains("direct_call_fails")) code = "permissionDeniedExample();"; else if (location.contains("wrapped_call_works")) code = "setTimeout(function(){permissionDeniedExample();}, 1);"; // evaluate code try { browser.evaluate(code); } catch (Exception e) { System.out.println(e); } arg0.doit = false; } }); } catch (SWTError e) { System.out.println("Could not instantiate Browser: " + e.getMessage()); display.dispose(); return; } browser.setText(html); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); } public static void Combo_dflt() { Display display = new Display(); Shell shell = new Shell(display); shell.setLayout(new FillLayout()); String[] ITEMS = { "A", "B", "C", "D" }; final Combo combo = new Combo(shell, SWT.DROP_DOWN); combo.setItems(ITEMS); combo.select(2); combo.addSelectionListener(new SelectionListener() { public void widgetSelected(SelectionEvent e) { System.out.println(combo.getText()); } public void widgetDefaultSelected(SelectionEvent e) { System.out.println(combo.getText()); } }); combo.addKeyListener(new KeyListener() { @Override public void keyReleased(KeyEvent arg0) { // TODO Auto-generated method stub } @Override public void keyPressed(KeyEvent arg0) { System.out.println(combo.getText()); if (arg0.keyCode == Byte_ascii.Ltr_a) { combo.setItem(0, "a"); combo.setListVisible(true); } else if (arg0.keyCode == Byte_ascii.Ltr_b) { combo.setItem(0, "b"); combo.setListVisible(true); } // System.out.println(combo.getText()); } }); shell.open(); combo.setListVisible(true); while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } } display.dispose(); } public static void Combo_composite() { final Display display = new Display(); final Shell shell = new Shell(display); GridLayout gridLayout = new GridLayout(); gridLayout.numColumns = 2; gridLayout.makeColumnsEqualWidth = true; shell.setLayout(gridLayout); final Text text = new Text(shell, SWT.BORDER); text.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING)); Text text2 = new Text(shell, SWT.BORDER); text2.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_END)); shell.pack(); shell.open(); final Shell combo_shell = new Shell(display, SWT.ON_TOP); combo_shell.setLayout(new FillLayout()); final Table combo_table = new Table(combo_shell, SWT.SINGLE); for (int i = 0; i < 5; i++) { new TableItem(combo_table, SWT.NONE); } text.addListener(SWT.KeyDown, new Listener() { @Override public void handleEvent(Event event) { int index = -1; switch (event.keyCode) { case SWT.ARROW_DOWN: if (event.stateMask == SWT.ALT) { Rectangle text_bounds = display.map(shell, null, text.getBounds()); combo_shell.setBounds(text_bounds.x, text_bounds.y + text_bounds.height, text_bounds.width, (text_bounds.height - 1) * combo_table.getItems().length); combo_shell.setVisible(true); } else { index = (combo_table.getSelectionIndex() + 1) % combo_table.getItemCount(); combo_table.setSelection(index); event.doit = false; } break; case SWT.ARROW_UP: if (event.stateMask == SWT.ALT) { combo_shell.setVisible(false); } else { index = combo_table.getSelectionIndex() - 1; if (index < 0) index = combo_table.getItemCount() - 1; combo_table.setSelection(index); event.doit = false; } break; case SWT.CR: if (combo_shell.isVisible() && combo_table.getSelectionIndex() != -1) { text.setText(combo_table.getSelection()[0].getText()); combo_shell.setVisible(false); } break; case SWT.ESC: combo_shell.setVisible(false); break; } } }); text.addListener(SWT.Modify, new Listener() { @Override public void handleEvent(Event event) { String string = text.getText(); if (string.length() == 0) { combo_shell.setVisible(false); } else { TableItem[] items = combo_table.getItems(); for (int i = 0; i < items.length; i++) { items[i].setText(string + '-' + i); } Rectangle text_bounds = display.map(shell, null, text.getBounds()); combo_shell.setBounds(text_bounds.x, text_bounds.y + text_bounds.height, text_bounds.width, (text_bounds.height - 1) * items.length); combo_shell.setVisible(true); } } }); combo_table.addListener(SWT.DefaultSelection, new Listener() { @Override public void handleEvent(Event arg0) { text.setText(combo_table.getSelection()[0].getText()); combo_shell.setVisible(false); } }); combo_table.addListener(SWT.KeyDown, new Listener() { @Override public void handleEvent(Event event) { if (event.keyCode == SWT.ESC) { combo_shell.setVisible(false); } } }); final Swt_shell_hider shell_hider = new Swt_shell_hider(combo_shell); Listener focus_out_listener = new Listener() { @Override public void handleEvent(Event arg0) { if (display.isDisposed()) return; Control control = display.getFocusControl(); // if (control == null || (control != text && control != combo_table)) { // combo_shell.setVisible(false); // } if (control == null || (control == text || control == combo_table)) { // combo_shell.setVisible(false); shell_hider.Active = true; display.asyncExec(shell_hider); //Thread t = new Thread(shell_hider); t.start(); //Swt_shell_hider } // boolean combo_is_focus = combo_table.isFocusControl(); // boolean text_is_focus = text.isFocusControl(); // if (control == null || (control == text)) { // combo_shell.setVisible(false); // } // if (control == null || (control == combo_table)) { // combo_shell.setVisible(true); // } } }; combo_table.addListener(SWT.FocusOut, focus_out_listener); text.addListener(SWT.FocusOut, focus_out_listener); Listener focus_in_listener = new Listener() { @Override public void handleEvent(Event arg0) { if (display.isDisposed()) return; Control control = display.getFocusControl(); if (control == combo_table) { // combo_shell.setVisible(false); //display.asyncExec(shell_hider); shell_hider.Active = false; //Swt_shell_hider } // boolean combo_is_focus = combo_table.isFocusControl(); // boolean text_is_focus = text.isFocusControl(); // if (control == null || (control == text)) { // combo_shell.setVisible(false); // } // if (control == null || (control == combo_table)) { // combo_shell.setVisible(true); // } } }; combo_table.addListener(SWT.FocusIn, focus_in_listener); shell.addListener(SWT.Move, new Listener() { @Override public void handleEvent(Event arg0) { combo_shell.setVisible(false); } }); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); } } class Swt_shell_hider implements Runnable { public boolean Active = true; private Shell combo_shell; public Swt_shell_hider(Shell combo_shell) {this.combo_shell = combo_shell;} @Override public void run() { // try { // Thread.sleep(1000); // } catch (InterruptedException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } if (Active) { combo_shell.setVisible(false); } } }