Skip to content
This repository has been archived by the owner on Nov 9, 2017. It is now read-only.

Commit

Permalink
rhbz953734 - UI change
Browse files Browse the repository at this point in the history
  • Loading branch information
Patrick Huang committed May 17, 2013
1 parent 5ae7f3f commit ca1bbf2
Show file tree
Hide file tree
Showing 11 changed files with 156 additions and 37 deletions.
Expand Up @@ -5,6 +5,7 @@
import org.zanata.webtrans.client.events.RunValidationEvent;
import org.zanata.webtrans.client.rpc.CachingDispatchAsync;
import org.zanata.webtrans.client.service.GetTransUnitActionContextHolder;
import org.zanata.webtrans.client.ui.ReviewContentWrapper;
import org.zanata.webtrans.client.view.ReviewContentsDisplay;
import org.zanata.webtrans.client.view.ReviewDisplay;
import org.zanata.webtrans.shared.model.TransUnit;
Expand All @@ -19,6 +20,7 @@

import net.customware.gwt.presenter.client.EventBus;
import net.customware.gwt.presenter.client.widget.WidgetPresenter;
import static com.google.common.base.Objects.*;

/**
* @author Patrick Huang <a href="mailto:pahuang@redhat.com">pahuang@redhat.com</a>
Expand All @@ -33,7 +35,7 @@ public class ReviewPresenter extends WidgetPresenter<ReviewDisplay> implements R
private List<ReviewContentsDisplay> contentsDisplayList;

@Inject
public ReviewPresenter(ReviewDisplay display, EventBus eventBus, Provider<ReviewContentsDisplay> reviewContentsDisplayProvider, CachingDispatchAsync dispatcher, GetTransUnitActionContextHolder contextHolder, SourceContentsPresenter sourceContentsPresenter)
public ReviewPresenter(ReviewDisplay display, EventBus eventBus, Provider<ReviewContentsDisplay> reviewContentsDisplayProvider, CachingDispatchAsync dispatcher, SourceContentsPresenter sourceContentsPresenter)
{
super(display, eventBus);
this.eventBus = eventBus;
Expand Down Expand Up @@ -66,26 +68,40 @@ public void setSelected(TransUnitId selectedId)
this.selectedId = selectedId;
ReviewContentsDisplay reviewContentsDisplay = Finds.findDisplayById(contentsDisplayList, selectedId).get();

for (HasText editor : reviewContentsDisplay.getEditors())
for (ReviewContentWrapper editor : reviewContentsDisplay.getEditors())
{
validate(editor, reviewContentsDisplay);
}
// display.showButtons(isDisplayButtons());
}

public void validate(HasText editor, ReviewContentsDisplay reviewContentsDisplay)
public void validate(ReviewContentWrapper editor, ReviewContentsDisplay reviewContentsDisplay)
{
TransUnitId transUnitId = sourceContentsPresenter.getCurrentTransUnitIdOrNull();
Optional<String> sourceContent = sourceContentsPresenter.getSourceContent(transUnitId);
if (sourceContent.isPresent())
{
RunValidationEvent event = new RunValidationEvent(sourceContent.get(), editor.getText(), false);
// widget that displays red outline
event.addWidget(editor);
// widget that displays warnings
event.addWidget(reviewContentsDisplay);
eventBus.fireEvent(event);
}
}


public void updateRow(TransUnit updatedTransUnit)
{
Optional<ReviewContentsDisplay> contentsDisplayOptional = Finds.findDisplayById(contentsDisplayList, updatedTransUnit.getId());
if (contentsDisplayOptional.isPresent())
{
ReviewContentsDisplay contentsDisplay = contentsDisplayOptional.get();
contentsDisplay.setValueAndCreateNewEditors(updatedTransUnit);
contentsDisplay.refresh();
}
}

@Override
public void acceptTranslation(TransUnitId id)
{
Expand Down
Expand Up @@ -49,6 +49,7 @@
import org.zanata.webtrans.client.events.UserConfigChangeEvent;
import org.zanata.webtrans.client.events.UserConfigChangeHandler;
import org.zanata.webtrans.client.resources.WebTransMessages;
import org.zanata.webtrans.client.service.GetTransUnitActionContextHolder;
import org.zanata.webtrans.client.service.NavigationService;
import org.zanata.webtrans.client.service.TransUnitSaveService;
import org.zanata.webtrans.client.service.TranslatorInteractionService;
Expand Down Expand Up @@ -99,6 +100,7 @@ public class TransUnitsTablePresenter extends WidgetPresenter<TransUnitsTableDis
private ReviewPresenter reviewPresenter;
private final TranslationHistoryPresenter translationHistoryPresenter;
private final Provider<GoToRowLink> goToRowLinkProvider;
private final GetTransUnitActionContextHolder contextHolder;
private final WebTransMessages messages;
private final EventBus eventBus;
private final NavigationService navigationService;
Expand All @@ -125,13 +127,15 @@ public TransUnitsTablePresenter(TransUnitsTableDisplay display, EventBus eventBu
TranslatorInteractionService translatorService,
TranslationHistoryPresenter translationHistoryPresenter,
Provider<GoToRowLink> goToRowLinkProvider,
GetTransUnitActionContextHolder contextHolder,
WebTransMessages messages, UserOptionsService userOptionsService)
// @formatter:on
{
super(display, eventBus);
this.display = display;
this.translationHistoryPresenter = translationHistoryPresenter;
this.goToRowLinkProvider = goToRowLinkProvider;
this.contextHolder = contextHolder;
this.messages = messages;
this.display.setRowSelectionListener(this);

Expand Down Expand Up @@ -313,21 +317,21 @@ public void onReviewModeChange(ReviewModeChangeEvent event)
@Override
public void refreshRow(TransUnit updatedTransUnit, EditorClientId editorClientId, TransUnitUpdated.UpdateType updateType)
{
// TODO rhbz953734 - need to also refresh in review presenter
if (isInReviewMode)
{
GoToRowLink goToRowLink = goToRowLinkProvider.get();

// goToRowLink.prepare("");
// eventBus.fireEvent(new NotificationEvent(Warning, "Translation has changed", ));
goToRowLink.prepare("", contextHolder.getContext().getDocument(), updatedTransUnit.getId());
eventBus.fireEvent(new NotificationEvent(Warning, "Translation has changed", goToRowLink));
reviewPresenter.updateRow(updatedTransUnit);
}
if (updateFromCurrentUsersEditorSave(editorClientId, updateType))
{
// the TransUnitUpdatedEvent is from current user's save action.
// Ignored.
return;
}
if (Objects.equal(selectedId, updatedTransUnit.getId()) && !Objects.equal(editorClientId, translatorService.getCurrentEditorClientId()))
if (Objects.equal(selectedId, updatedTransUnit.getId()) && !Objects.equal(editorClientId, translatorService.getCurrentEditorClientId()) && !isInReviewMode)
{
// updatedTU is our active row but done by another user
eventBus.fireEvent(new NotificationEvent(Error, messages.concurrentEdit()));
Expand Down
Expand Up @@ -106,4 +106,10 @@ public interface TableEditorMessages extends Messages

@DefaultMessage("ALT+Down or ALT+K: Move to next row")
String saveAsApprovedDialogInfo3();

@DefaultMessage("Accept translation")
String reviewAccept();

@DefaultMessage("Reject translation")
String reviewReject();
}
@@ -0,0 +1,73 @@
package org.zanata.webtrans.client.ui;

import java.util.List;

import org.zanata.webtrans.client.view.NeedsRefresh;
import com.allen_sauer.gwt.log.client.Log;
import com.google.gwt.core.client.GWT;
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.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.HasText;
import com.google.gwt.user.client.ui.Widget;

public class ReviewContentWidget extends Composite implements ReviewContentWrapper
{
private static ReviewContentWidgetUiBinder ourUiBinder = GWT.create(ReviewContentWidgetUiBinder.class);

@UiField
HTMLPanel root;
@UiField
CodeMirrorReadOnlyWidget textArea;
@UiField
Style style;

public ReviewContentWidget()
{
initWidget(ourUiBinder.createAndBindUi(this));
}

@Override
public void updateValidationWarning(List<String> errors)
{
if (errors.isEmpty())
{
root.removeStyleName(style.hasValidationError());
}
else
{
Log.info("add error to root");
root.addStyleName(style.hasValidationError());
}
}

@Override
public String getText()
{
return textArea.getText();
}

@Override
public void setText(String text)
{
textArea.setText(text);
}

@Override
public void refresh()
{
textArea.refresh();
}

interface ReviewContentWidgetUiBinder extends UiBinder<HTMLPanel, ReviewContentWidget>
{
}

interface Style extends CssResource
{

String hasValidationError();
}
}
@@ -0,0 +1,14 @@
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:fui="urn:import:org.zanata.webtrans.client.ui"
xmlns:g='urn:import:com.google.gwt.user.client.ui'>
<ui:style field="style" type="org.zanata.webtrans.client.ui.ReviewContentWidget.Style">
.hasValidationError {
border: 1px solid #ff0000;
}
</ui:style>

<g:HTMLPanel styleName="TableEditorCell-Target" ui:field="root" width="99%" height="100%">
<fui:CodeMirrorReadOnlyWidget ui:field="textArea" />

</g:HTMLPanel>
</ui:UiBinder>
@@ -0,0 +1,10 @@
package org.zanata.webtrans.client.ui;

import org.zanata.webtrans.client.view.NeedsRefresh;
import com.google.gwt.user.client.ui.HasText;
import com.google.inject.ImplementedBy;

@ImplementedBy(ReviewContentWidget.class)
public interface ReviewContentWrapper extends HasUpdateValidationWarning, HasText, NeedsRefresh
{
}
Expand Up @@ -3,6 +3,7 @@
import java.util.List;

import org.zanata.webtrans.client.ui.HasUpdateValidationWarning;
import org.zanata.webtrans.client.ui.ReviewContentWrapper;
import org.zanata.webtrans.shared.model.HasTransUnitId;
import org.zanata.webtrans.shared.model.TransUnit;
import org.zanata.webtrans.shared.model.TransUnitId;
Expand All @@ -18,7 +19,7 @@ public interface ReviewContentsDisplay extends WidgetDisplay, NeedsRefresh, HasT

void setListener(Listener listener);

List<? extends HasText> getEditors();
List<ReviewContentWrapper> getEditors();

interface Listener
{
Expand Down
Expand Up @@ -25,6 +25,8 @@
import org.zanata.common.ContentState;
import org.zanata.webtrans.client.ui.CodeMirrorReadOnlyWidget;
import org.zanata.webtrans.client.ui.HasUpdateValidationWarning;
import org.zanata.webtrans.client.ui.ReviewContentWidget;
import org.zanata.webtrans.client.ui.ReviewContentWrapper;
import org.zanata.webtrans.client.ui.ValidationMessagePanelView;
import org.zanata.webtrans.shared.model.TransUnit;
import org.zanata.webtrans.shared.model.TransUnitId;
Expand Down Expand Up @@ -59,7 +61,7 @@ public class ReviewContentsView extends Composite implements ReviewContentsDispl
InlineLabel acceptIcon;
@UiField
InlineLabel rejectIcon;
private List<CodeMirrorReadOnlyWidget> editors = Lists.newArrayList();
private List<ReviewContentWrapper> editors = Lists.newArrayList();
private TransUnitId id;
private Listener listener;

Expand All @@ -83,15 +85,11 @@ public void setValueAndCreateNewEditors(TransUnit transUnit)
int rowIndex = 0;
for (String target : cachedTargets)
{
HTMLPanel panel = new HTMLPanel("");
panel.setSize("95%", "100%");
panel.setStyleName("TableEditorCell-Target");
CodeMirrorReadOnlyWidget editor = new CodeMirrorReadOnlyWidget();
editor.setText(target);
panel.add(editor);

editorGrid.setWidget(rowIndex, 0, panel);
editors.add(editor);
ReviewContentWidget contentWidget = new ReviewContentWidget();
contentWidget.setText(target);

editorGrid.setWidget(rowIndex, 0, contentWidget);
editors.add(contentWidget);
rowIndex++;
}
editorGrid.setStyleName(resolveStyleName(transUnit.getStatus()));
Expand Down Expand Up @@ -138,7 +136,7 @@ public void updateValidationWarning(List<String> errors)
}

@Override
public List<? extends HasText> getEditors()
public List<ReviewContentWrapper> getEditors()
{
return editors;
}
Expand Down
Expand Up @@ -29,23 +29,9 @@
color: #0085CC;
}

.unsaved {
background-color: #56c0e6;
}

.saving {
position: absolute;
top: 8px;
left: 30px;
font-size: smaller;
color: #ffffff;
z-index: 1;
background-color: #ff4500;
}

</ui:style>

<g:HorizontalPanel width="100%" addStyleNames="{style.targetContentsCell}" spacing="3">
<g:HorizontalPanel width="100%" addStyleNames="{style.targetContentsCell} reviewTable" spacing="3">
<g:cell verticalAlignment="ALIGN_TOP">
<g:FlowPanel styleName="{style.editorGridWrapper}">
<g:Grid ui:field="editorGrid" />
Expand All @@ -54,8 +40,8 @@
</g:cell>
<g:cell verticalAlignment="ALIGN_TOP" horizontalAlignment="ALIGN_JUSTIFY" width="22px">
<g:HTMLPanel ui:field="buttons" styleName="fadeElement buttons">
<g:InlineLabel ui:field="acceptIcon" title="{messages.editSaveShortcut}" styleName="icon-install {style.button}"/>
<g:InlineLabel ui:field="rejectIcon" title="{messages.editSaveAsFuzzyShortcut}" styleName="icon-flag-1 {style.button}" />
<g:InlineLabel ui:field="acceptIcon" title="{messages.reviewAccept}" styleName="icon-ok-circle2 {style.button}"/>
<g:InlineLabel ui:field="rejectIcon" title="{messages.reviewReject}" styleName="icon-cancel-circle2 {style.button}" />
</g:HTMLPanel>
</g:cell>
</g:HorizontalPanel>
Expand Down
Expand Up @@ -630,6 +630,14 @@ td.ApprovedStateDecoration div div div
min-height: 2em;
}

.reviewTable .CodeMirror-cursor {
display: none;
}

.reviewTable .CodeMirror-lines {
cursor: default;
}

.keyShortcutPanel
{
border:none;
Expand Down
Expand Up @@ -37,6 +37,7 @@
import org.zanata.webtrans.client.events.TransUnitSelectionEvent;
import org.zanata.webtrans.client.events.UserConfigChangeEvent;
import org.zanata.webtrans.client.resources.WebTransMessages;
import org.zanata.webtrans.client.service.GetTransUnitActionContextHolder;
import org.zanata.webtrans.client.service.NavigationService;
import org.zanata.webtrans.client.service.TransUnitSaveService;
import org.zanata.webtrans.client.service.TranslatorInteractionService;
Expand Down Expand Up @@ -83,13 +84,15 @@ public class TransUnitsTablePresenterTest
private ReviewPresenter reviewPresenter;
@Mock
private Provider<GoToRowLink> goToRowProvider;
private GetTransUnitActionContextHolder contextHolder;


@BeforeMethod
public void setUp() throws Exception
{
MockitoAnnotations.initMocks(this);
presenter = new TransUnitsTablePresenter(display, eventBus, navigationService, sourceContentsPresenter, targetContentsPresenter, translatorService, translationHistoryPresenter, goToRowProvider, messages, userOptionsService);
contextHolder = new GetTransUnitActionContextHolder(new UserConfigHolder());
presenter = new TransUnitsTablePresenter(display, eventBus, navigationService, sourceContentsPresenter, targetContentsPresenter, translatorService, translationHistoryPresenter, goToRowProvider, contextHolder, messages, userOptionsService);

verify(display).setRowSelectionListener(presenter);
verify(display).addFilterConfirmationHandler(presenter);
Expand Down

0 comments on commit ca1bbf2

Please sign in to comment.