Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Copyright (c) 2015 Andrzej Borucki, see LICENSE file
- package com.blogspot.borneq;
- import java.io.ByteArrayInputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import org.eclipse.swt.SWT;
- import org.eclipse.swt.custom.CTabFolder;
- import org.eclipse.swt.custom.CTabFolder2Adapter;
- import org.eclipse.swt.custom.CTabFolderEvent;
- import org.eclipse.swt.custom.CTabItem;
- import org.eclipse.swt.graphics.GC;
- import org.eclipse.swt.graphics.Image;
- import org.eclipse.swt.graphics.Point;
- import org.eclipse.swt.layout.GridData;
- import org.eclipse.swt.layout.GridLayout;
- import org.eclipse.swt.widgets.Composite;
- import org.eclipse.swt.widgets.Control;
- import org.eclipse.swt.widgets.CoolBar;
- import org.eclipse.swt.widgets.CoolItem;
- import org.eclipse.swt.widgets.Display;
- import org.eclipse.swt.widgets.Event;
- import org.eclipse.swt.widgets.Listener;
- import org.eclipse.swt.widgets.Menu;
- import org.eclipse.swt.widgets.MenuItem;
- import org.eclipse.swt.widgets.Shell;
- import org.eclipse.swt.widgets.Text;
- import org.eclipse.swt.widgets.ToolBar;
- import org.eclipse.swt.widgets.ToolItem;
- /**
- * Main window of application. This is a special window, because has event loop.
- * Creating main menu and other controls.
- *
- * @author Andrzej Borucki
- * @version 1.0
- * @since 2015-07-13
- */
- public class ShellMain {
- final private Shell shell;
- final private Display display;
- private Image image;
- private MostRecentlyUsed mru;
- private static CommandsFile commandsFile;
- private void makeFileMenu(Menu bar) {
- MenuItem fileItem = new MenuItem(bar, SWT.CASCADE);
- fileItem.setText("&File");
- Menu fileMenu = new Menu(shell, SWT.DROP_DOWN);
- fileItem.setMenu(fileMenu);
- MenuItem item = new MenuItem(fileMenu, SWT.PUSH);
- item.setText("&Open\tCtrl+O");
- item.addListener(SWT.Selection, new Listener() {
- @Override
- public void handleEvent(Event event) {
- System.out.println("Open");
- // commandsFile.ChooseOpenDoc();
- }
- });
- item.setAccelerator(SWT.MOD1 + 'O');
- MenuItem recentItem = new MenuItem(fileMenu, SWT.CASCADE);
- recentItem.setText("Open &Recent");
- mru = new MostRecentlyUsed(recentItem, shell);
- }
- private void makeMainMenu() {
- Menu bar = new Menu(shell, SWT.BAR);
- shell.setMenuBar(bar);
- makeFileMenu(bar);
- }
- private Control addFileToolBar(Composite composite, Shell shell, ZipFileHandler zipHandler) {
- ToolBar toolBar = new ToolBar(composite, SWT.NONE);
- ToolItem item = new ToolItem(toolBar, SWT.PUSH);
- InputStream stream = new ByteArrayInputStream(zipHandler.getEntry("new-document16.png"));
- Image icon = new Image(display, stream);
- item.setImage(icon);
- item.setToolTipText("New document");
- item.addListener(SWT.Selection, new Listener() {
- @Override
- public void handleEvent(Event event) {
- System.out.println("New");
- IconEditApp.registerShell(new ShellMain());
- // CommandsFile.NewDoc();
- }
- });
- item = new ToolItem(toolBar, SWT.PUSH);
- stream = new ByteArrayInputStream(zipHandler.getEntry("open-document16.png"));
- icon = new Image(display, stream);
- item.setImage(icon);
- item.setToolTipText("Open document");
- item.addListener(SWT.Selection, new Listener() {
- @Override
- public void handleEvent(Event event) {
- System.out.println("Open");
- // CommandsFile.ChooseOpenDoc();
- }
- });
- return toolBar;
- }
- private void createCoolBar() {
- CoolBar coolBar = new CoolBar(shell, SWT.BORDER);
- // coolBar.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
- ZipFileHandler zipHandler = new ZipFileHandler("icons.zip");
- CoolItem item = new CoolItem(coolBar, SWT.DROP_DOWN);
- item.setControl(addFileToolBar(coolBar, shell, zipHandler));
- Control control = item.getControl();
- Point size = control.computeSize(SWT.DEFAULT, SWT.DEFAULT);
- item.setPreferredSize(item.computeSize(size.x, size.y));
- try {
- zipHandler.close();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- coolBar.pack();
- }
- void createTabs() {
- shell.setLayout(new GridLayout()); // Important! This line is essential for CTabFolder view
- GC gc = new GC(image);
- gc.setBackground(display.getSystemColor(SWT.COLOR_BLUE));
- gc.fillRectangle(0, 0, 16, 16);
- gc.setBackground(display.getSystemColor(SWT.COLOR_YELLOW));
- gc.fillRectangle(3, 3, 10, 10);
- gc.dispose();
- final CTabFolder folder = new CTabFolder(shell, SWT.BORDER);
- folder.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
- folder.setSimple(false);
- folder.setUnselectedImageVisible(false);
- folder.setUnselectedCloseVisible(false);
- for (int i = 0; i < 8; i++) {
- CTabItem item = new CTabItem(folder, SWT.CLOSE);
- item.setText("Item " + i);
- item.setImage(image);
- Text text = new Text(folder, SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL);
- text.setText("item " + i);
- item.setControl(text);
- }
- folder.setMinimizeVisible(true);
- folder.setMaximizeVisible(true);
- folder.addCTabFolder2Listener(new CTabFolder2Adapter() {
- @Override
- public void minimize(CTabFolderEvent event) {
- folder.setMinimized(true);
- folder.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
- shell.layout(true);
- }
- @Override
- public void maximize(CTabFolderEvent event) {
- folder.setMaximized(true);
- folder.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
- shell.layout(true);
- }
- @Override
- public void restore(CTabFolderEvent event) {
- folder.setMinimized(false);
- folder.setMaximized(false);
- folder.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
- shell.layout(true);
- }
- });
- }
- private void init() {
- shell.setText("IconEdit");
- shell.setSize (300, 300);
- makeMainMenu();
- createCoolBar();
- createTabs();
- }
- public ShellMain() {
- // ======================================================
- // Create the main Display object that represents the UI
- // subsystem and contains the single UI handling thread
- // ======================================================
- display = Display.getDefault();
- // ====================================================
- // create a shell for the main window from the Display
- // ====================================================
- shell = new Shell(display, SWT.SHELL_TRIM);
- // =============================================================
- // Register a listener for the Close event on the main Shell.
- // This disposes the Display which will cause the entire child
- // tree to dispose
- // =============================================================
- image = new Image(display, 16, 16);
- shell.addListener(SWT.Close, new Listener() {
- @Override
- public void handleEvent(Event event) {
- System.out.println("Main Shell handling Close event, about to dipose the main Display");
- image.dispose();
- }
- });
- init(); // creates components
- shell.pack();
- shell.open();
- }
- public boolean isDisposed() {
- return shell.isDisposed();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment