/******************************************************************************* * Copyright (c) 2011 Kai Toedter and others. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html. * * Contributors: * Kai Toedter - initial API and implementation ******************************************************************************/ package com.toedter.e4.ui.workbench.addons.swt.minmax; import java.util.HashMap; import org.eclipse.e4.ui.model.application.ui.MUIElement; import org.eclipse.swt.custom.CTabFolder; import org.eclipse.swt.custom.CTabFolder2Listener; import org.eclipse.swt.custom.CTabFolderEvent; import com.toedter.e4.ui.workbench.addons.generic.minmax.GenericMinMaxAddon; import com.toedter.e4.ui.workbench.addons.generic.minmax.IMinMaxAddon; @SuppressWarnings("restriction") public class MinMaxAddon implements IMinMaxAddon { private static class MyCTabFolder2Listener implements CTabFolder2Listener { public Runnable maximizedHandler; public Runnable minimizedHandler; public Runnable restoreHandler; @Override public void showList(CTabFolderEvent event) { System.out.println("SWT MinMaxAddon: showList()"); } @Override public void restore(CTabFolderEvent event) { restoreHandler.run(); CTabFolder cTabFolder = (CTabFolder) event.getSource(); cTabFolder.setMaximizeVisible(true); cTabFolder.setMaximized(false); cTabFolder.layout(); } @Override public void minimize(CTabFolderEvent event) { minimizedHandler.run(); CTabFolder cTabFolder = (CTabFolder) event.getSource(); cTabFolder.setMaximizeVisible(true); cTabFolder.setMaximized(false); cTabFolder.layout(); } @Override public void maximize(CTabFolderEvent event) { maximizedHandler.run(); CTabFolder cTabFolder = (CTabFolder) event.getSource(); cTabFolder.setMaximizeVisible(true); cTabFolder.setMaximized(true); cTabFolder.layout(); } @Override public void close(CTabFolderEvent event) { System.out.println("SWT MinMaxAddon: close()"); } }; private final HashMap<CTabFolder, MyCTabFolder2Listener> tabFolderMap; public MinMaxAddon() { System.out.println("SWT MinMaxAddon"); tabFolderMap = new HashMap<CTabFolder, MyCTabFolder2Listener>(); } @Override public void setGenericMinMaxAddon(GenericMinMaxAddon genericMinMaxAddon) { System.out.println("SWT MinMaxAddon.setGenericMinMaxAddon()"); } @Override public void setMaximizeHandler(MUIElement element, final Runnable maximizedHandler) { if (element.getWidget() instanceof CTabFolder) { MyCTabFolder2Listener cTabFolder2Listener = getTabFolder2Listener(element); cTabFolder2Listener.maximizedHandler = maximizedHandler; CTabFolder cTabFolder = (CTabFolder) element.getWidget(); cTabFolder.setMaximizeVisible(true); } } private MyCTabFolder2Listener getTabFolder2Listener(MUIElement element) { CTabFolder cTabFolder = (CTabFolder) element.getWidget(); MyCTabFolder2Listener cTabFolder2Listener = tabFolderMap.get(cTabFolder); if (cTabFolder2Listener == null) { cTabFolder2Listener = new MyCTabFolder2Listener(); cTabFolder.addCTabFolder2Listener(cTabFolder2Listener); tabFolderMap.put(cTabFolder, cTabFolder2Listener); } return cTabFolder2Listener; } @Override public void setMinimizeHandler(MUIElement element, Runnable minimizedHandler) { if (element.getWidget() instanceof CTabFolder) { MyCTabFolder2Listener cTabFolder2Listener = getTabFolder2Listener(element); cTabFolder2Listener.minimizedHandler = minimizedHandler; CTabFolder cTabFolder = (CTabFolder) element.getWidget(); cTabFolder.setMinimizeVisible(true); } } @Override public void setRestoreHandler(MUIElement element, Runnable restoreHandler) { if (element.getWidget() instanceof CTabFolder) { MyCTabFolder2Listener cTabFolder2Listener = getTabFolder2Listener(element); cTabFolder2Listener.restoreHandler = restoreHandler; } } private void setCTabFolderButtons(CTabFolder cTabFolder, MUIElement element, boolean hideButtons) { if (hideButtons) { cTabFolder.setMinimizeVisible(false); cTabFolder.setMaximizeVisible(false); } else { if (element.getTags().contains(GenericMinMaxAddon.MINIMIZED)) { cTabFolder.setMinimizeVisible(false); cTabFolder.setMaximizeVisible(true); cTabFolder.setMaximized(true); } else if (element.getTags().contains(GenericMinMaxAddon.MAXIMIZED)) { cTabFolder.setMinimizeVisible(true); cTabFolder.setMaximizeVisible(true); cTabFolder.setMaximized(true); } else { cTabFolder.setMinimizeVisible(true); cTabFolder.setMaximizeVisible(true); cTabFolder.setMinimized(false); cTabFolder.setMaximized(false); cTabFolder.layout(); } } } }