/* * Copyright 2010 kk-electronic a/s. * * This file is part of KKPortal. * * KKPortal is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * KKPortal is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with KKPortal. If not, see <http://www.gnu.org/licenses/>. * */ package com.kk_electronic.kkportal.core.ui; import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.Scheduler; import com.google.gwt.core.client.Scheduler.ScheduledCommand; import com.google.gwt.event.dom.client.BlurEvent; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.DoubleClickEvent; import com.google.gwt.event.dom.client.KeyCodes; import com.google.gwt.event.dom.client.KeyPressEvent; import com.google.gwt.resources.client.CssResource; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.Widget; import com.google.inject.Inject; import com.kk_electronic.kkportal.core.tabs.TabInfo; /** * @author Rasmus Carlsen * */ public class Tab extends Composite{ private TabInfo info; public static interface UIBinder extends UiBinder<Widget, Tab> { } static interface Style extends CssResource { String selected(); } @UiField Style style; @UiField Anchor name; @UiField TogglePanel toggle; @UiField TextBox editname; @UiField Widget container; private TabDisplay handler; @Inject public Tab(UIBinder binder) { initWidget(binder.createAndBindUi(this)); } public String getName() { if (info != null) { return info.getName(); } else { return null; } } public void setInfo(TabInfo tabInfo) { this.info = tabInfo; name.setText(this.info.getName()); name.setHref("#View$" + this.info.getId()); } public TabInfo getInfo() { return info; } public void setSelected() { this.addStyleName(style.selected()); } /** * @param b */ public void setEdit(boolean b) { if(b){ toggle.setWidget(1); editname.setText(info.getName()); Scheduler.get().scheduleDeferred(new ScheduledCommand() { @Override public void execute() { editname.setFocus(true); } }); } else { toggle.setWidget(0); } } @UiHandler("editname") public void onBlur(BlurEvent event){ commit(); } @UiHandler("editname") public void onKeyPress(KeyPressEvent event){ if(event.getCharCode() == KeyCodes.KEY_ENTER){ commit(); } } @UiHandler("name") public void onDoubleClick(DoubleClickEvent event){ setEdit(true); } @UiHandler("delete") public void onDoubleClick(ClickEvent event){ if(handler != null){ handler.deletetab(this); } } /** * */ private void commit() { GWT.log("Tab-edit done"); setEdit(false); name.setText(editname.getText()); if(handler != null){ handler.onEditTabNameClick(this,editname.getText()); } } /** * @param tabDisplay */ public void setHandler(TabDisplay handler) { this.handler = handler; } }