Borneq

ShellMain.java

Jul 23rd, 2015
553
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.97 KB | None | 0 0
  1. // Copyright (c) 2015 Andrzej Borucki, see LICENSE file
  2. package com.blogspot.borneq;
  3.  
  4. import java.io.ByteArrayInputStream;
  5. import java.io.IOException;
  6. import java.io.InputStream;
  7.  
  8. import org.eclipse.swt.SWT;
  9. import org.eclipse.swt.custom.CTabFolder;
  10. import org.eclipse.swt.custom.CTabFolder2Adapter;
  11. import org.eclipse.swt.custom.CTabFolderEvent;
  12. import org.eclipse.swt.custom.CTabItem;
  13. import org.eclipse.swt.graphics.GC;
  14. import org.eclipse.swt.graphics.Image;
  15. import org.eclipse.swt.graphics.Point;
  16. import org.eclipse.swt.layout.GridData;
  17. import org.eclipse.swt.layout.GridLayout;
  18. import org.eclipse.swt.widgets.Composite;
  19. import org.eclipse.swt.widgets.Control;
  20. import org.eclipse.swt.widgets.CoolBar;
  21. import org.eclipse.swt.widgets.CoolItem;
  22. import org.eclipse.swt.widgets.Display;
  23. import org.eclipse.swt.widgets.Event;
  24. import org.eclipse.swt.widgets.Listener;
  25. import org.eclipse.swt.widgets.Menu;
  26. import org.eclipse.swt.widgets.MenuItem;
  27. import org.eclipse.swt.widgets.Shell;
  28. import org.eclipse.swt.widgets.Text;
  29. import org.eclipse.swt.widgets.ToolBar;
  30. import org.eclipse.swt.widgets.ToolItem;
  31.  
  32. /**
  33.  * Main window of application. This is a special window, because has event loop.
  34.  * Creating main menu and other controls.
  35.  *
  36.  * @author Andrzej Borucki
  37.  * @version 1.0
  38.  * @since 2015-07-13
  39.  */
  40. public class ShellMain {
  41.  
  42.     final private Shell shell;
  43.     final private Display display;
  44.     private Image image;
  45.     private MostRecentlyUsed mru;
  46.     private static CommandsFile commandsFile;
  47.  
  48.     private void makeFileMenu(Menu bar) {
  49.         MenuItem fileItem = new MenuItem(bar, SWT.CASCADE);
  50.         fileItem.setText("&File");
  51.         Menu fileMenu = new Menu(shell, SWT.DROP_DOWN);
  52.         fileItem.setMenu(fileMenu);
  53.  
  54.         MenuItem item = new MenuItem(fileMenu, SWT.PUSH);
  55.         item.setText("&Open\tCtrl+O");
  56.         item.addListener(SWT.Selection, new Listener() {
  57.             @Override
  58.             public void handleEvent(Event event) {
  59.                 System.out.println("Open");
  60.                 // commandsFile.ChooseOpenDoc();
  61.             }
  62.         });
  63.         item.setAccelerator(SWT.MOD1 + 'O');
  64.  
  65.         MenuItem recentItem = new MenuItem(fileMenu, SWT.CASCADE);
  66.         recentItem.setText("Open &Recent");
  67.         mru = new MostRecentlyUsed(recentItem, shell);
  68.     }
  69.  
  70.     private void makeMainMenu() {
  71.         Menu bar = new Menu(shell, SWT.BAR);
  72.         shell.setMenuBar(bar);
  73.         makeFileMenu(bar);
  74.     }
  75.  
  76.     private Control addFileToolBar(Composite composite, Shell shell, ZipFileHandler zipHandler) {
  77.         ToolBar toolBar = new ToolBar(composite, SWT.NONE);
  78.  
  79.         ToolItem item = new ToolItem(toolBar, SWT.PUSH);
  80.         InputStream stream = new ByteArrayInputStream(zipHandler.getEntry("new-document16.png"));
  81.         Image icon = new Image(display, stream);
  82.         item.setImage(icon);
  83.         item.setToolTipText("New document");
  84.         item.addListener(SWT.Selection, new Listener() {
  85.             @Override
  86.             public void handleEvent(Event event) {
  87.                 System.out.println("New");
  88.                 IconEditApp.registerShell(new ShellMain());
  89.                 // CommandsFile.NewDoc();
  90.             }
  91.         });
  92.  
  93.         item = new ToolItem(toolBar, SWT.PUSH);
  94.         stream = new ByteArrayInputStream(zipHandler.getEntry("open-document16.png"));
  95.         icon = new Image(display, stream);
  96.         item.setImage(icon);
  97.         item.setToolTipText("Open document");
  98.         item.addListener(SWT.Selection, new Listener() {
  99.             @Override
  100.             public void handleEvent(Event event) {
  101.                 System.out.println("Open");
  102.                 // CommandsFile.ChooseOpenDoc();
  103.             }
  104.         });
  105.         return toolBar;
  106.     }
  107.  
  108.     private void createCoolBar() {
  109.         CoolBar coolBar = new CoolBar(shell, SWT.BORDER);
  110.         // coolBar.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
  111.         ZipFileHandler zipHandler = new ZipFileHandler("icons.zip");
  112.         CoolItem item = new CoolItem(coolBar, SWT.DROP_DOWN);
  113.         item.setControl(addFileToolBar(coolBar, shell, zipHandler));
  114.         Control control = item.getControl();
  115.         Point size = control.computeSize(SWT.DEFAULT, SWT.DEFAULT);
  116.         item.setPreferredSize(item.computeSize(size.x, size.y));
  117.  
  118.         try {
  119.             zipHandler.close();
  120.         } catch (IOException e) {
  121.             // TODO Auto-generated catch block
  122.             e.printStackTrace();
  123.         }
  124.         coolBar.pack();
  125.     }
  126.  
  127.     void createTabs() {
  128.         shell.setLayout(new GridLayout()); // Important! This line is essential for CTabFolder view
  129.         GC gc = new GC(image);
  130.         gc.setBackground(display.getSystemColor(SWT.COLOR_BLUE));
  131.         gc.fillRectangle(0, 0, 16, 16);
  132.         gc.setBackground(display.getSystemColor(SWT.COLOR_YELLOW));
  133.         gc.fillRectangle(3, 3, 10, 10);
  134.         gc.dispose();
  135.         final CTabFolder folder = new CTabFolder(shell, SWT.BORDER);
  136.         folder.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
  137.         folder.setSimple(false);
  138.         folder.setUnselectedImageVisible(false);
  139.         folder.setUnselectedCloseVisible(false);
  140.         for (int i = 0; i < 8; i++) {
  141.             CTabItem item = new CTabItem(folder, SWT.CLOSE);
  142.             item.setText("Item " + i);
  143.             item.setImage(image);
  144.             Text text = new Text(folder, SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL);
  145.             text.setText("item " + i);
  146.             item.setControl(text);
  147.         }
  148.         folder.setMinimizeVisible(true);
  149.         folder.setMaximizeVisible(true);
  150.         folder.addCTabFolder2Listener(new CTabFolder2Adapter() {
  151.             @Override
  152.             public void minimize(CTabFolderEvent event) {
  153.                 folder.setMinimized(true);
  154.                 folder.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
  155.                 shell.layout(true);
  156.             }
  157.  
  158.             @Override
  159.             public void maximize(CTabFolderEvent event) {
  160.                 folder.setMaximized(true);
  161.                 folder.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
  162.                 shell.layout(true);
  163.             }
  164.  
  165.             @Override
  166.             public void restore(CTabFolderEvent event) {
  167.                 folder.setMinimized(false);
  168.                 folder.setMaximized(false);
  169.                 folder.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
  170.                 shell.layout(true);
  171.             }
  172.         });
  173.     }
  174.  
  175.     private void init() {
  176.         shell.setText("IconEdit");
  177.         shell.setSize (300, 300);
  178.         makeMainMenu();
  179.         createCoolBar();
  180.         createTabs();
  181.     }
  182.  
  183.     public ShellMain() {
  184.         // ======================================================
  185.         // Create the main Display object that represents the UI
  186.         // subsystem and contains the single UI handling thread
  187.         // ======================================================
  188.         display = Display.getDefault();
  189.         // ====================================================
  190.         // create a shell for the main window from the Display
  191.         // ====================================================
  192.         shell = new Shell(display, SWT.SHELL_TRIM);
  193.         // =============================================================
  194.         // Register a listener for the Close event on the main Shell.
  195.         // This disposes the Display which will cause the entire child
  196.         // tree to dispose
  197.         // =============================================================
  198.         image = new Image(display, 16, 16);
  199.         shell.addListener(SWT.Close, new Listener() {
  200.             @Override
  201.             public void handleEvent(Event event) {
  202.                 System.out.println("Main Shell handling Close event, about to dipose the main Display");
  203.                 image.dispose();
  204.             }
  205.         });
  206.         init(); // creates components
  207.         shell.pack();
  208.         shell.open();
  209.     }
  210.  
  211.     public boolean isDisposed() {
  212.         return shell.isDisposed();
  213.     }
  214. }
Advertisement
Add Comment
Please, Sign In to add comment