/* * 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.controller; import next.i.util.Utils; import next.i.view.XTab; import com.google.gwt.core.client.JavaScriptObject; import com.google.gwt.user.client.Event; import com.google.gwt.user.client.EventListener; import com.google.gwt.user.client.ui.Image; /** * Manages a single tab view holding tab title, tab image and tab inner * controller. * * It also acts as a mediator between master XTabBarController and inner view * IController. * * <p> * <img src='../../../resources/XTab.png'/> * </p> */ public class XTabController implements EventListener { private XTabBarController _parent; private XTab _tab; private JavaScriptObject _clickListener; private IController _uiController; public XTabController(IController uiController) { TabController_(uiController); } public void set(String title, Image imageTab, Image imageTabSelected) { set_(title, imageTab, imageTabSelected); } public void setSelected(boolean selected) { _tab.setSelected(selected); } public XTab getTab() { return _tab; } public IController getIController() { return _uiController; } public void setIController(IController uiController) { setIController_(uiController); } @Override public void onBrowserEvent(Event e) { onBrowserEvent_(e); } void register(XTabBarController parent) { this._parent = parent; } protected void registerEvents() { registerEvents_(); } protected void unregisterEvents() { unregisterEvents_(); } /** * private */ private void TabController_(IController uiController) { _tab = new XTab(); this._uiController = uiController; registerEvents(); } private void set_(String title, Image imageTab, Image imageTabSelected) { _tab.setTitle(title); _tab.setIcons(imageTab, imageTabSelected); } private void setIController_(IController uiController) { this._uiController = uiController; // May be removeFromParent works better _parent.getTabBar().getContent().clear(); _parent.getTabBar().add(uiController.getNavigationView()); } private void onBrowserEvent_(Event e) { String type = e.getType(); if (type.equals("click")) { onClick_(e); } } private void registerEvents_() { if (_clickListener == null) { _clickListener = Utils.addEventListener(_tab.getElement(), "click", true, this); } } private void unregisterEvents_() { if (_clickListener != null) { Utils.removeEventListener(_tab.getElement(), "click", true, _clickListener); _clickListener = null; } } private void onClick_(Event e) { _parent.onTabChange(this); } }