/* * * Copyright (C) 2007-2015 Licensed to the Comunes Association (CA) under * one or more contributor license agreements (see COPYRIGHT for details). * The CA licenses this file to you under the GNU Affero General Public * License version 3, (the "License"); you may not use this file except in * compliance with the License. This file is part of kune. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program 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 Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * */ package cc.kune.gspace.client.viewers; import org.waveprotocol.wave.client.common.util.DateUtils; import cc.kune.common.client.actions.ui.ActionSimplePanel; import cc.kune.common.client.actions.ui.GuiProvider; import cc.kune.common.client.actions.ui.descrip.GuiActionDescCollection; import cc.kune.common.client.actions.ui.descrip.GuiActionDescrip; import cc.kune.common.client.actions.ui.descrip.MenuDescriptor; import cc.kune.common.client.tooltip.Tooltip; import cc.kune.common.shared.i18n.I18nTranslationService; import cc.kune.common.shared.res.KuneIcon; import cc.kune.core.client.dnd.FolderContainerDropController; import cc.kune.core.client.dnd.FolderContentDropController; import cc.kune.core.client.dnd.InboxToContainerDropController; import cc.kune.core.client.dnd.KuneDragController; import cc.kune.core.client.registry.ContentCapabilitiesRegistry; import cc.kune.core.shared.domain.ContentStatus; import cc.kune.core.shared.dto.StateContainerDTO; import cc.kune.gspace.client.armor.GSpaceArmor; import cc.kune.gspace.client.viewers.FolderViewerPresenter.FolderViewerView; import cc.kune.gspace.client.viewers.items.FolderItemDescriptor; import cc.kune.gspace.client.viewers.items.FolderItemWidget; import com.calclab.emite.core.client.packet.TextUtils; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.dom.client.DoubleClickHandler; import com.google.gwt.event.dom.client.MouseOutEvent; import com.google.gwt.event.dom.client.MouseOutHandler; import com.google.gwt.event.dom.client.MouseOverEvent; import com.google.gwt.event.dom.client.MouseOverHandler; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.FlexTable; import com.google.gwt.user.client.ui.Widget; import com.google.inject.Inject; import com.google.inject.Provider; import com.google.web.bindery.event.shared.EventBus; // TODO: Auto-generated Javadoc /** * The Class FolderViewerAsTablePanel. * * @author vjrj@ourproject.org (Vicente J. Ruiz Jurado) */ public class FolderViewerAsTablePanel extends AbstractFolderViewerPanel { /** * The Interface FolderViewerAsTablePanelUiBinder. * * @author vjrj@ourproject.org (Vicente J. Ruiz Jurado) */ interface FolderViewerAsTablePanelUiBinder extends UiBinder<Widget, FolderViewerAsTablePanel> { } /** The Constant ITEM_ID. */ public static final String ITEM_ID = "k-fvat-item-"; /** The ui binder. */ private static FolderViewerAsTablePanelUiBinder uiBinder = GWT.create(FolderViewerAsTablePanelUiBinder.class); /** The flex. */ @UiField FlexTable flex; /** The gui provider. */ private final GuiProvider guiProvider; /** * Instantiates a new folder viewer as table panel. * * @param gsArmor * the gs armor * @param i18n * the i18n * @param eventBus * the event bus * @param guiProvider * the gui provider * @param res * the res * @param capabilitiesRegistry * the capabilities registry * @param dragController * the drag controller * @param contentDropControllerProv * the content drop controller prov * @param containerDropControllerProv * the container drop controller prov */ @Inject public FolderViewerAsTablePanel(final GSpaceArmor gsArmor, final I18nTranslationService i18n, final EventBus eventBus, final GuiProvider guiProvider, final ContentCapabilitiesRegistry capabilitiesRegistry, final KuneDragController dragController, final Provider<FolderContentDropController> contentDropControllerProv, final Provider<FolderContainerDropController> containerDropControllerProv, final InboxToContainerDropController fromInboxDropController) { super(gsArmor, eventBus, i18n, capabilitiesRegistry, dragController, contentDropControllerProv, containerDropControllerProv, fromInboxDropController); this.guiProvider = guiProvider; widget = uiBinder.createAndBindUi(this); widget.addStyleName("k-folder-viewer"); } /* * (non-Javadoc) * * @see * cc.kune.gspace.client.viewers.AbstractFolderViewerView#addItem(cc.kune. * gspace.client.viewers.items.FolderItemDescriptor, * com.google.gwt.event.dom.client.ClickHandler, * com.google.gwt.event.dom.client.DoubleClickHandler) */ @Override public void addItem(final FolderItemDescriptor item, final ClickHandler clickHandler, final DoubleClickHandler doubleClickHandler) { final int rowCount = flex.getRowCount(); final FolderItemWidget itemWidget = new FolderItemWidget((KuneIcon) item.getIcon(), TextUtils.ellipsis(item.getText(), 70), item.getStateToken(), ITEM_ID + (flex.getRowCount() + 1)); final ActionSimplePanel toolbar = new ActionSimplePanel(guiProvider, i18n); final long modifiedOn = item.getModififiedOn(); if (modifiedOn != FolderViewerView.NO_DATE) { // String dateFormat = session.getCurrentLanguage().getDateFormatShort(); itemWidget.setModifiedText(DateUtils.getInstance().formatPastDate(modifiedOn)); } itemWidget.setMenu(toolbar); Tooltip.to(itemWidget, item.getTooltip()); // FIXME make this under demand itemWidget.getRowClick().addClickHandler(clickHandler); itemWidget.getRowDoubleClick().addDoubleClickHandler(doubleClickHandler); if (ContentStatus.inTheDustbin.equals(item.getContentStatus())) { itemWidget.getTitleWidget().addStyleName("k-line-through"); } itemWidget.getRowDoubleClick().addDoubleClickHandler(doubleClickHandler); itemWidget.getRowMouse().addMouseOutHandler(new MouseOutHandler() { @Override public void onMouseOut(final MouseOutEvent event) { itemWidget.setMenuVisible(false); } }); final MenuDescriptor menu = new MenuDescriptor(i18n.t("Actions")); menu.setAtRight(true); menu.withStyles("k-def-docbtn, k-btn, k-button"); menu.setStandalone(false); toolbar.add(menu); final GuiActionDescCollection actions = item.getActionCollection(); toolbar.setVisible(actions.size() > 0); itemWidget.setMenuVisible(false); itemWidget.getRowMouse().addMouseOverHandler(new MouseOverHandler() { boolean initialized = false; private void init(final FolderItemDescriptor item, final FolderItemWidget itemWidget, final ActionSimplePanel toolbar) { for (final GuiActionDescrip menuItem : actions) { menuItem.setParent(menu); toolbar.add(menuItem); } } @Override public void onMouseOver(final MouseOverEvent event) { if (!initialized) { init(item, itemWidget, toolbar); initialized = true; } itemWidget.setMenuVisible(true); } }); flex.setWidget(rowCount + 1, 0, itemWidget); if (item.isDraggable()) { dragController.makeDraggable(itemWidget, itemWidget.getTitleWidget()); } if (!item.isContainer() && item.isDroppable()) { final FolderContentDropController dropController = contentDropControllerProv.get(); dropController.init(itemWidget); dropController.setTarget(item.getStateToken()); } if (item.isContainer() && item.isDroppable()) { final FolderContainerDropController dropController = containerDropControllerProv.get(); dropController.init(itemWidget); dropController.setTarget(item.getStateToken()); } } /* * (non-Javadoc) * * @see cc.kune.gspace.client.viewers.AbstractFolderViewerPanel#clear() */ @Override public void clear() { flex.removeAllRows(); super.clear(); } /* * (non-Javadoc) * * @see * cc.kune.gspace.client.viewers.AbstractFolderViewerPanel#setContainer(cc * .kune.core.shared.dto.StateContainerDTO) */ @Override public void setContainer(final StateContainerDTO state) { super.setContainer(state); } }