/*
* Copyright 2010, 2012 Google Inc.
*
* 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.
*
* Adapter by Kune Dev Team
*/
package cc.kune.gspace.client.i18n;
import cc.kune.common.client.notify.NotifyUser;
import cc.kune.common.shared.utils.SimpleCallback;
import cc.kune.core.client.i18n.I18nUITranslationService;
import cc.kune.core.shared.dto.I18nLanguageSimpleDTO;
import cc.kune.core.shared.dto.I18nTranslationDTO;
import com.google.gwt.cell.client.AbstractCell;
import com.google.gwt.cell.client.ValueUpdater;
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.dom.client.Element;
import com.google.gwt.dom.client.NativeEvent;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.safehtml.shared.SafeHtmlUtils;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.cellview.client.CellList;
import com.google.gwt.user.cellview.client.HasKeyboardPagingPolicy.KeyboardPagingPolicy;
import com.google.gwt.user.cellview.client.HasKeyboardSelectionPolicy.KeyboardSelectionPolicy;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.view.client.SelectionChangeEvent;
import com.google.gwt.view.client.SingleSelectionModel;
import com.google.inject.Inject;
// TODO: Auto-generated Javadoc
/**
* The Class I18nCellList.
*
* @author vjrj@ourproject.org (Vicente J. Ruiz Jurado)
*/
public class I18nCellList extends Composite {
/**
* The UiBinder interface used by this example.
*
* @author vjrj@ourproject.org (Vicente J. Ruiz Jurado)
*/
interface Binder extends UiBinder<Widget, I18nCellList> {
}
/**
* The Cell used to render a {@link I18nTranslationDTO}.
*
* @author vjrj@ourproject.org (Vicente J. Ruiz Jurado)
*/
static class TranslationCell extends AbstractCell<I18nTranslationDTO> {
/** The dirty style. */
private static String DIRTY_STYLE = "font-style: italic;";
/** The odd style. */
private static String ODD_STYLE = "";
// private static String ODD_STYLE = "background-color: #F3F7FB;";
/**
* Instantiates a new translation cell.
*/
public TranslationCell() {
}
/*
* (non-Javadoc)
*
* @see com.google.gwt.cell.client.AbstractCell#dependsOnSelection()
*/
@Override
public boolean dependsOnSelection() {
return super.dependsOnSelection();
}
/*
* (non-Javadoc)
*
* @see
* com.google.gwt.cell.client.AbstractCell#onBrowserEvent(com.google.gwt
* .cell.client.Cell.Context, com.google.gwt.dom.client.Element,
* java.lang.Object, com.google.gwt.dom.client.NativeEvent,
* com.google.gwt.cell.client.ValueUpdater)
*/
@Override
public void onBrowserEvent(final com.google.gwt.cell.client.Cell.Context context,
final Element parent, final I18nTranslationDTO value, final NativeEvent event,
final ValueUpdater<I18nTranslationDTO> valueUpdater) {
super.onBrowserEvent(context, parent, value, event, valueUpdater);
}
/*
* (non-Javadoc)
*
* @see
* com.google.gwt.cell.client.AbstractCell#onEnterKeyDown(com.google.gwt
* .cell.client.Cell.Context, com.google.gwt.dom.client.Element,
* java.lang.Object, com.google.gwt.dom.client.NativeEvent,
* com.google.gwt.cell.client.ValueUpdater)
*/
@Override
protected void onEnterKeyDown(final com.google.gwt.cell.client.Cell.Context context,
final Element parent, final I18nTranslationDTO value, final NativeEvent event,
final ValueUpdater<I18nTranslationDTO> valueUpdater) {
}
/*
* (non-Javadoc)
*
* @see
* com.google.gwt.cell.client.AbstractCell#render(com.google.gwt.cell.client
* .Cell.Context, java.lang.Object,
* com.google.gwt.safehtml.shared.SafeHtmlBuilder)
*/
@Override
public void render(final Context context, final I18nTranslationDTO value, final SafeHtmlBuilder sb) {
// Value can be null, so do a null check..
if (value == null) {
return;
}
final int index = context.getIndex();
final boolean odd = index % 2 == 0;
sb.appendHtmlConstant("<div style='display: table-row; border-bottom: 1px dashed #CCC; "
+ (odd ? ODD_STYLE : "") + "'>");
sb.appendHtmlConstant("<div style='display: table-cell; width: 100%; padding: 1px 5px;"
+ (value.isDirty() ? DIRTY_STYLE : "") + "'>");
final String trKey = value.getTrKey();
sb.appendEscaped(trKey == null ? value.getParentTrKey() : trKey);
sb.appendHtmlConstant("</div></div>");
}
}
/**
* The CellList.
*/
private final CellList<I18nTranslationDTO> cellList;
/** The data. */
private final I18nTranslationDataProvider data;
/**
* The pager used to change the range of data.
*/
@UiField
ShowMorePagerPanel pagerPanel;
/**
* The pager used to display the current range.
*/
@UiField
RangeLabelPager rangeLabelPager;
/** The form used to update translations. */
@UiField
I18nTranslatorForm translatorForm;
/**
* Instantiates a new i18n cell list.
*
* @param data
* the data
* @param i18n
* the i18n
* @param saver
* the saver
*/
@Inject
public I18nCellList(final I18nTranslationDataProvider data, final I18nUITranslationService i18n,
final I18nTranslatorSaver saver) {
this.data = data;
final TranslationCell cell = new TranslationCell();
// Set a key provider that provides a unique key for each contact. If key is
// used to identify translations when fields change.
cellList = new CellList<I18nTranslationDTO>(cell, I18nTranslationDTO.KEY_PROVIDER);
cellList.setPageSize(30);
cellList.setEmptyListMessage(SafeHtmlUtils.fromTrustedString("<span style='padding: 10px; font-style: italic;'>Empty list</span>"));
cellList.setKeyboardPagingPolicy(KeyboardPagingPolicy.INCREASE_RANGE);
cellList.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.BOUND_TO_SELECTION);
final SingleSelectionModel<I18nTranslationDTO> selectionModel = new SingleSelectionModel<I18nTranslationDTO>(
I18nTranslationDTO.KEY_PROVIDER);
// Add a selection model so we can select cells.
cellList.setSelectionModel(selectionModel);
// Create the UiBinder.
final Binder uiBinder = GWT.create(Binder.class);
initWidget(uiBinder.createAndBindUi(this));
translatorForm.init(data, i18n, saver);
cellList.setValueUpdater(new ValueUpdater<I18nTranslationDTO>() {
@Override
public void update(final I18nTranslationDTO value) {
// save(value);
}
});
selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
@Override
public void onSelectionChange(final SelectionChangeEvent event) {
translatorForm.setInfo(selectionModel.getSelectedObject());
Scheduler.get().scheduleEntry(new ScheduledCommand() {
@Override
public void execute() {
translatorForm.focusToTranslate();
}
});
}
});
// cellList.sinkEvents(com.google.gwt.user.client.Event.KEYEVENTS);
data.addDataDisplay(cellList);
data.setSelectionMode(selectionModel);
data.setLoadCallback(new SimpleCallback() {
@Override
public void onCallback() {
translatorForm.focusToTranslate();
NotifyUser.hideProgress();
}
});
// Set the cellList as the display of the pagers.
// pagerPanel is a scrollable pager that extends the range when the
// user scrolls to the bottom. rangeLabelPager is a pager that displays the
// current range, but does not have any controls to change the range.
pagerPanel.setDisplay(cellList);
// pagerPanel.setStyleName("k-i18n-trans-list");
rangeLabelPager.setDisplay(cellList);
}
/**
* Sets the language.
*
* @param fromLanguage
* the from language
* @param toLanguage
* the to language
* @param toTranslate
* the to translate
*/
public void setLanguage(final I18nLanguageSimpleDTO fromLanguage,
final I18nLanguageSimpleDTO toLanguage, final boolean toTranslate) {
data.setLanguage(fromLanguage, toLanguage, toTranslate);
translatorForm.setToLanguage(toLanguage);
}
}