/* * Copyright 2011 Vancouver Ywebb Consulting Ltd * * 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 next.i.view; import next.i.XStyle; import next.i.view.XBarItem.Type; import com.google.gwt.user.client.Element; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.FlexTable; import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter; import com.google.gwt.user.client.ui.HasHorizontalAlignment; import com.google.gwt.user.client.ui.HasVerticalAlignment; /** * Provides a mechanism for displaying a navigation bar just below the status * bar. To support navigation of hierarchical content, NavigationBar uses a * stack to manage instances of BarItem, each of which represents a state of the * navigation bar. By default, NavigationBar displays a back button on the left * and a title in the center, but you can specify custom views for these, in * addition to providing an optional button on the right of the navigation bar. * Note that if you use a NavigationController object to manage hierarchical * navigation, you should not directly access the navigation bar object. * * <p> * <img class='ai' src='../../../resources/XNavigationBar.png' /> * </p> */ public class XNavigationBar extends Composite { private FlexTable _bar; private XBarItem _buttonLeft; private XBarItem _buttonRight; private XBarItem _barTitle; public XNavigationBar() { NavigationBar_(); setStyleName(XStyle.navigationBar.name()); } public void setTitle(String title) { this._barTitle.setTitle(title); } public XBarItem getLeftButton() { return _buttonLeft; } public XBarItem getRightButton() { return _buttonRight; } public XBarItem getBarTitle() { return _barTitle; } public void repaint() { repaint_(); } public void setLeftTitle(String title, Type type) { setLeftTitle_(title, type); } public void setRightTitle(String title) { setRightTitle_(title); } /** * Private */ private void NavigationBar_() { _bar = new FlexTable(); initWidget(_bar); // _bar.setStyleName(XStyle.navigationBar.name()); _barTitle = new XBarItem(Type.LABEL); _barTitle.setStyleName(XStyle.navBarTitle.name()); _bar.setWidget(0, 1, _barTitle); _bar.setWidth("100%"); FlexCellFormatter fcf = _bar.getFlexCellFormatter(); fcf.setWidth(0, 0, "15%"); fcf.setWidth(0, 1, "70%"); fcf.setWidth(0, 2, "15%"); fcf.setHeight(0, 0, "100%"); fcf.setHorizontalAlignment(0, 1, HasHorizontalAlignment.ALIGN_CENTER); fcf.setHorizontalAlignment(0, 2, HasHorizontalAlignment.ALIGN_RIGHT); fcf.setVerticalAlignment(0, 0, HasVerticalAlignment.ALIGN_MIDDLE); fcf.setVerticalAlignment(0, 1, HasVerticalAlignment.ALIGN_MIDDLE); fcf.setVerticalAlignment(0, 2, HasVerticalAlignment.ALIGN_MIDDLE); fcf.setWordWrap(0, 1, false); } private void setLeftTitle_(String title, Type type) { if (title != null) { initLeftItem_(type); this._buttonLeft.setTitle(title); } } private void setRightTitle_(String title) { if (title != null) { initRightItem_(Type.BUTTON); this._buttonRight.setTitle(title); } } private void initLeftItem_(Type type) { if (_buttonLeft == null) { _buttonLeft = new XBarItem(type); _bar.setWidget(0, 0, _buttonLeft); } } private void initRightItem_(Type type) { if (_buttonRight == null) { _buttonRight = new XBarItem(type); _bar.setWidget(0, 2, _buttonRight); } } private void clearSelection_() { if (_buttonLeft != null) { _buttonLeft.setSelected(false); } if (_buttonRight != null) { _buttonRight.setSelected(false); } } private void repaint_() { FlexCellFormatter fcf = _bar.getFlexCellFormatter(); Element elLeft = fcf.getElement(0, 0); // Element elCenter = fcf.getElement(0, 1); Element elRight = fcf.getElement(0, 2); int barWidth = _bar.getOffsetWidth(); // Window.alert("left=" + elLeft.getOffsetWidth() + " center=" + // elCenter.getOffsetWidth() + " right=" + elRight.getOffsetWidth() // + " barWidth=" + barWidth); int widthLeft = elLeft.getOffsetWidth(); int widthRight = elRight.getOffsetWidth(); if (widthLeft > widthRight) { widthRight = widthLeft; fcf.setWidth(0, 0, widthLeft + "px"); fcf.setWidth(0, 2, widthLeft + "px"); fcf.setWidth(0, 1, (barWidth - 2 * widthLeft) + "px"); } else if (widthLeft < widthRight) { widthLeft = widthRight; fcf.setWidth(0, 0, widthRight + "px"); fcf.setWidth(0, 2, widthRight + "px"); fcf.setWidth(0, 1, (barWidth - 2 * widthLeft) + "px"); } // Window.alert(" after >>> left=" + elLeft.getOffsetWidth() + " center=" + // elCenter.getOffsetWidth() + " right=" // + elRight.getOffsetWidth() + " barWidth=" + barWidth); } }