/* * Copyright 2015 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.uberfire.client.views.pfly.menu; import javax.annotation.PostConstruct; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.inject.Instance; import javax.inject.Inject; import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Widget; import org.gwtbootstrap3.client.shared.event.HiddenEvent; import org.gwtbootstrap3.client.shared.event.HiddenHandler; import org.gwtbootstrap3.client.shared.event.HideEvent; import org.gwtbootstrap3.client.shared.event.HideHandler; import org.gwtbootstrap3.client.shared.event.ShowEvent; import org.gwtbootstrap3.client.shared.event.ShowHandler; import org.gwtbootstrap3.client.shared.event.ShownEvent; import org.gwtbootstrap3.client.shared.event.ShownHandler; import org.gwtbootstrap3.client.ui.Button; import org.gwtbootstrap3.client.ui.Collapse; import org.gwtbootstrap3.client.ui.Navbar; import org.gwtbootstrap3.client.ui.NavbarBrand; import org.gwtbootstrap3.client.ui.NavbarCollapse; import org.gwtbootstrap3.client.ui.NavbarHeader; import org.gwtbootstrap3.client.ui.constants.NavbarType; import org.gwtbootstrap3.client.ui.constants.Styles; import org.gwtbootstrap3.client.ui.constants.Toggle; import org.gwtbootstrap3.client.ui.html.Span; import org.jboss.errai.ioc.client.container.IOCResolutionException; import org.uberfire.client.workbench.widgets.menu.WorkbenchMenuBarPresenter; import org.uberfire.mvp.Command; import org.uberfire.workbench.model.menu.MenuPosition; /** * The Menu Bar widget */ @ApplicationScoped public class WorkbenchMenuBarView extends Composite implements WorkbenchMenuBarPresenter.View { private final Navbar navBar = GWT.create(Navbar.class); private final NavbarHeader navbarHeader = GWT.create(NavbarHeader.class); private final NavbarCollapse navbarCollapse = GWT.create(NavbarCollapse.class); @Inject WorkbenchMenuCompactNavBarView workbenchMenuCompactNavBarView; @Inject WorkbenchMenuStandardNavBarView workbenchMenuStandardNavBarView; @Inject private Instance<MainBrand> menuBarBrand; private Collapse navBarCollapse = GWT.create(Collapse.class); @Inject private UtilityMenuBarView utilityMenuBarView; @PostConstruct protected void setup() { navBar.setType(NavbarType.INVERSE); navBar.addStyleName("navbar-pf"); try { final NavbarBrand brand = GWT.create(NavbarBrand.class); brand.add(menuBarBrand.get()); navbarHeader.add(brand); } catch (IOCResolutionException e) { // app didn't provide a branded header bean } navBar.add(navbarHeader); setupNavBarCollapse(); navbarCollapse.add(workbenchMenuCompactNavBarView); navbarCollapse.add(navBarCollapse); navbarCollapse.add(utilityMenuBarView); navBar.add(navbarCollapse); setupToggle(); initWidget(navBar); expand(); } protected void setupToggle() { final Button btnToggle = GWT.create(Button.class); btnToggle.removeStyleName("btn-default"); btnToggle.addStyleName(Styles.NAVBAR_TOGGLE); btnToggle.setDataToggle(Toggle.COLLAPSE); btnToggle.setDataTargetWidget(navbarCollapse); btnToggle.add(createToggleBar()); btnToggle.add(createToggleBar()); btnToggle.add(createToggleBar()); navbarHeader.add(btnToggle); } private Span createToggleBar() { final Span span = GWT.create(Span.class); span.addStyleName("icon-bar"); return span; } protected void setupNavBarCollapse() { workbenchMenuCompactNavBarView.addStyleName("hidden"); navBarCollapse.addShowHandler(new ShowHandler() { @Override public void onShow(ShowEvent showEvent) { workbenchMenuCompactNavBarView.removeStyleName("show"); workbenchMenuCompactNavBarView.addStyleName("hidden"); navbarHeader.removeStyleName(Styles.PULL_LEFT); workbenchMenuStandardNavBarView.removeStyleName("hidden"); workbenchMenuStandardNavBarView.addStyleName("show"); } }); navBarCollapse.addShownHandler(new ShownHandler() { @Override public void onShown(ShownEvent event) { navBar.removeStyleName("uf-navbar-compact"); } }); navBarCollapse.addHiddenHandler(new HiddenHandler() { @Override public void onHidden(HiddenEvent event) { workbenchMenuStandardNavBarView.removeStyleName("show"); workbenchMenuStandardNavBarView.addStyleName("hidden"); navbarHeader.addStyleName(Styles.PULL_LEFT); workbenchMenuCompactNavBarView.removeStyleName("hidden"); workbenchMenuCompactNavBarView.addStyleName("show"); navBar.addStyleName("uf-navbar-compact"); navBarCollapse.removeStyleName(Styles.IN); } }); navBarCollapse.addStyleName(Styles.IN); navBarCollapse.add(workbenchMenuStandardNavBarView); } @Override public void addMenuItem(final String id, final String label, final String parentId, final Command command, final MenuPosition position) { workbenchMenuStandardNavBarView.addMenuItem(id, label, parentId, command, position); workbenchMenuCompactNavBarView.addMenuItem(id, label, parentId, command, position); } @Override public void addCustomMenuItem(final Widget menu, final MenuPosition position) { workbenchMenuStandardNavBarView.addCustomMenuItem(menu, position); workbenchMenuCompactNavBarView.addCustomMenuItem(menu, position); } @Override public void addGroupMenuItem(final String id, final String label, final MenuPosition position) { workbenchMenuStandardNavBarView.addGroupMenuItem(id, label, position); workbenchMenuCompactNavBarView.addGroupMenuItem(id, label, position); } @Override public void addContextMenuItem( final String menuItemId, final String id, final String label, final String parentId, final Command command, final MenuPosition position) { workbenchMenuStandardNavBarView.addContextMenuItem(menuItemId, id, label, parentId, command, position); workbenchMenuCompactNavBarView.addContextMenuItem(menuItemId, id, label, parentId, command, position); } @Override public void addContextGroupMenuItem(final String menuItemId, final String id, final String label, final MenuPosition position) { workbenchMenuStandardNavBarView.addContextGroupMenuItem(menuItemId, id, label, position); workbenchMenuCompactNavBarView.addContextGroupMenuItem(menuItemId, id, label, position); } @Override public void clearContextMenu() { workbenchMenuStandardNavBarView.clearContextMenu(); workbenchMenuCompactNavBarView.clearContextMenu(); } @Override public void clear() { workbenchMenuStandardNavBarView.clear(); workbenchMenuCompactNavBarView.clear(); utilityMenuBarView.clear(); } @Override public void expand() { if (navBarCollapse.isHidden()) { navBarCollapse.show(); } } @Override public void collapse() { if (navBarCollapse.isShown()) { navBarCollapse.hide(); } } @Override public void selectMenuItem(final String id) { workbenchMenuCompactNavBarView.selectMenuItem(id); workbenchMenuStandardNavBarView.selectMenuItem(id); } @Override public void addCollapseHandler(final Command command) { navBarCollapse.addHideHandler(new HideHandler() { @Override public void onHide(final HideEvent hideEvent) { command.execute(); } }); } @Override public void addExpandHandler(final Command command) { navBarCollapse.addShowHandler(new ShowHandler() { @Override public void onShow(final ShowEvent showEvent) { command.execute(); } }); } @Override public void enableMenuItem(final String menuItemId, final boolean enabled) { workbenchMenuStandardNavBarView.enableMenuItem(menuItemId, enabled); workbenchMenuCompactNavBarView.enableMenuItem(menuItemId, enabled); } @Override public void enableContextMenuItem(final String menuItemId, final boolean enabled) { workbenchMenuStandardNavBarView.enableContextMenuItem(menuItemId, enabled); workbenchMenuCompactNavBarView.enableContextMenuItem(menuItemId, enabled); } public interface WorkbenchMenuNavBarView { void clear(); void addMenuItem(String id, String label, String parentId, Command command, MenuPosition position); void addCustomMenuItem(Widget menu, MenuPosition position); void addGroupMenuItem(String id, String label, MenuPosition position); void selectMenuItem(String id); void addContextMenuItem(String menuItemId, String id, String label, String parentId, Command command, MenuPosition position); void addContextGroupMenuItem(String menuItemId, String id, String label, MenuPosition position); void clearContextMenu(); void enableMenuItem(String menuItemId, boolean enabled); void enableContextMenuItem(String menuItemId, boolean enabled); } }