/** * Sencha GXT 3.0.0b - Sencha for GWT * Copyright(c) 2007-2012, Sencha, Inc. * licensing@sencha.com * * http://www.sencha.com/products/gxt/license/ */ package com.sencha.gxt.desktopapp.client; import java.util.Iterator; import com.google.gwt.event.logical.shared.SelectionEvent; import com.google.gwt.event.logical.shared.SelectionHandler; import com.google.gwt.user.client.ui.Widget; import com.sencha.gxt.desktop.client.layout.DesktopLayoutType; import com.sencha.gxt.desktop.client.widget.Desktop; import com.sencha.gxt.desktop.client.widget.Shortcut; import com.sencha.gxt.desktop.client.widget.StartMainMenuItem; import com.sencha.gxt.desktop.client.widget.StartToolMenuItem; import com.sencha.gxt.desktopapp.client.images.DesktopImages; import com.sencha.gxt.widget.core.client.event.SelectEvent; import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler; import com.sencha.gxt.widget.core.client.menu.Item; /** * Provides a desktop application view. * * @see DesktopAppView */ public class DesktopAppViewImpl implements DesktopAppView { private Desktop desktop; private Shortcut fileManagerShortcut; private StartMainMenuItem fileManagerStartMenuItem; private StartToolMenuItem cascadeToolMenuItem; private StartToolMenuItem tileToolMenuItem; private StartToolMenuItem updateProfileToolMenuItem; private StartToolMenuItem logoutToolMenuItem; private SelectionHandler<Item> fileManagerStartMenuListener; private SelectHandler fileManagerShortcutListener; private DesktopAppPresenter desktopAppPresenter; /** * Creates a desktop application view that interacts with the rest of the * application using the specified presenter. * * @param desktopAppPresenter the source of commands and data and the target * of user initiated events. */ public DesktopAppViewImpl(DesktopAppPresenter desktopAppPresenter) { this.desktopAppPresenter = desktopAppPresenter; } @Override public void add(Widget widget) { getDesktop().activate(widget); } @Override public Widget asWidget() { return getDesktop().asWidget(); } @Override public void clear() { // TODO: implement throw new UnsupportedOperationException(); } private Desktop getDesktop() { if (desktop == null) { desktop = new Desktop(); desktop.addShortcut(getFileManagerShortcut()); desktop.addStartMenuItem(getFileManagerStartMenuItem()); desktop.setStartMenuHeading(getPresenter().getCurrentUser()); desktop.setStartMenuIcon(DesktopImages.INSTANCE.user()); desktop.addToolMenuItem(getCascadeToolMenuItem()); desktop.addToolMenuItem(getTileToolMenuItem()); desktop.addToolSeparator(); desktop.addToolMenuItem(getUpdateProfileToolMenuItem()); desktop.addToolSeparator(); desktop.addToolMenuItem(getLogoutToolMenuItem()); } return desktop; } private DesktopAppPresenter getDesktopAppPresenter() { return desktopAppPresenter; } @Override public Iterator<Widget> iterator() { // TODO: implement throw new UnsupportedOperationException(); } @Override public boolean remove(Widget w) { // TODO: implement throw new UnsupportedOperationException(); } @Override public void setDesktopLayoutType(DesktopLayoutType desktopLayoutType) { getDesktop().setDesktopLayoutType(desktopLayoutType); } private StartToolMenuItem getCascadeToolMenuItem() { if (cascadeToolMenuItem == null) { cascadeToolMenuItem = new StartToolMenuItem("Cascade"); cascadeToolMenuItem.setIcon(DesktopImages.INSTANCE.application_cascade()); cascadeToolMenuItem.addSelectionHandler(new SelectionHandler<Item>() { @Override public void onSelection(SelectionEvent<Item> event) { getDesktop().layout(DesktopLayoutType.CASCADE); } }); } return cascadeToolMenuItem; } private Shortcut getFileManagerShortcut() { if (fileManagerShortcut == null) { fileManagerShortcut = new Shortcut(); fileManagerShortcut.setText("File Manager"); fileManagerShortcut.setIcon(DesktopImages.INSTANCE.folder_shortcut()); fileManagerShortcut.addSelectHandler(getFileManagerShortcutListener()); } return fileManagerShortcut; } private SelectHandler getFileManagerShortcutListener() { if (fileManagerShortcutListener == null) { fileManagerShortcutListener = new SelectHandler() { @Override public void onSelect(SelectEvent event) { getDesktopAppPresenter().onOpenFileManager(); } }; } return fileManagerShortcutListener; } private StartMainMenuItem getFileManagerStartMenuItem() { if (fileManagerStartMenuItem == null) { fileManagerStartMenuItem = new StartMainMenuItem("File Manager"); fileManagerStartMenuItem.setIcon(DesktopImages.INSTANCE.folder()); fileManagerStartMenuItem.addSelectionHandler(getFileManagerStartMenuListener()); } return fileManagerStartMenuItem; } private SelectionHandler<Item> getFileManagerStartMenuListener() { if (fileManagerStartMenuListener == null) { fileManagerStartMenuListener = new SelectionHandler<Item>() { @Override public void onSelection(SelectionEvent<Item> event) { getDesktopAppPresenter().onOpenFileManager(); } }; } return fileManagerStartMenuListener; } private StartToolMenuItem getLogoutToolMenuItem() { if (logoutToolMenuItem == null) { logoutToolMenuItem = new StartToolMenuItem("Logout"); logoutToolMenuItem.setIcon(DesktopImages.INSTANCE.door_out()); logoutToolMenuItem.addSelectionHandler(new SelectionHandler<Item>() { @Override public void onSelection(SelectionEvent<Item> event) { getPresenter().onLogout(); } }); } return logoutToolMenuItem; } private DesktopAppPresenter getPresenter() { return desktopAppPresenter; } private StartToolMenuItem getTileToolMenuItem() { if (tileToolMenuItem == null) { tileToolMenuItem = new StartToolMenuItem("Tile"); tileToolMenuItem.setIcon(DesktopImages.INSTANCE.application_tile_horizontal()); tileToolMenuItem.addSelectionHandler(new SelectionHandler<Item>() { @Override public void onSelection(SelectionEvent<Item> event) { getDesktop().layout(DesktopLayoutType.TILE); } }); } return tileToolMenuItem; } private StartToolMenuItem getUpdateProfileToolMenuItem() { if (updateProfileToolMenuItem == null) { updateProfileToolMenuItem = new StartToolMenuItem("Settings"); updateProfileToolMenuItem.setIcon(DesktopImages.INSTANCE.user_edit()); updateProfileToolMenuItem.addSelectionHandler(new SelectionHandler<Item>() { @Override public void onSelection(SelectionEvent<Item> event) { getDesktopAppPresenter().onOpenProfile(); } }); } return updateProfileToolMenuItem; } }