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

Commit

Permalink
rhbz996446 - translation history popup shortcut context
Browse files Browse the repository at this point in the history
  • Loading branch information
Patrick Huang committed Sep 5, 2013
1 parent daa499f commit 9879689
Show file tree
Hide file tree
Showing 12 changed files with 84 additions and 46 deletions.
Expand Up @@ -69,8 +69,13 @@ public enum ShortcutContext
Chat,

/**
* Used by all popup
* Used by {@link org.zanata.webtrans.client.presenter.TranslationHistoryPresenter}
*/
Popup
TransHistoryPopup,

/**
* Used by {@link org.zanata.webtrans.client.presenter.ForceReviewCommentPresenter}
*/
RejectConfirmationPopup

}
Expand Up @@ -59,8 +59,7 @@ public class ForceReviewCommentPresenter extends WidgetPresenter<ForceReviewComm

@Inject
public ForceReviewCommentPresenter(ForceReviewCommentDisplay display, EventBus eventBus, CachingDispatchAsync dispatcher,
GetTransUnitActionContextHolder contextHolder, KeyShortcutPresenter keyShortcutPresenter,
WebTransMessages messages)
GetTransUnitActionContextHolder contextHolder, KeyShortcutPresenter keyShortcutPresenter)
{
super(display, eventBus);
this.display = display;
Expand All @@ -71,14 +70,14 @@ public ForceReviewCommentPresenter(ForceReviewCommentDisplay display, EventBus e

eventBus.addHandler(CommentBeforeSaveEvent.TYPE, this);

registerKeyShortcut(display, messages);
registerKeyShortcut();
}

private void registerKeyShortcut(final ForceReviewCommentDisplay display, WebTransMessages messages)
private void registerKeyShortcut()
{
KeyShortcut confirmShortcut = KeyShortcut.Builder.builder()
.addKey(new Keys(Keys.CTRL_KEY, KeyCodes.KEY_ENTER))
.setContext(ShortcutContext.Popup).setDescription(messages.confirmRejection())
.setContext(ShortcutContext.RejectConfirmationPopup)
.setHandler(new KeyShortcutEventHandler()
{
@Override
Expand Down
Expand Up @@ -468,7 +468,7 @@ public void showShortcuts()

public Set<ShortcutContext> getActiveContexts()
{
return ImmutableSet.copyOf(activeContexts);
return ImmutableSet.copyOf(ensureActiveContexts());
}

private class KeyShortcutHandlerRegistration implements HandlerRegistration
Expand Down
Expand Up @@ -5,9 +5,13 @@
import java.util.List;

import org.zanata.webtrans.client.events.CopyDataToEditorEvent;
import org.zanata.webtrans.client.events.KeyShortcutEvent;
import org.zanata.webtrans.client.events.KeyShortcutEventHandler;
import org.zanata.webtrans.client.events.NotificationEvent;
import org.zanata.webtrans.client.events.ReviewCommentEvent;
import org.zanata.webtrans.client.events.ReviewCommentEventHandler;
import org.zanata.webtrans.client.keys.KeyShortcut;
import org.zanata.webtrans.client.keys.Keys;
import org.zanata.webtrans.client.keys.ShortcutContext;
import org.zanata.webtrans.client.resources.WebTransMessages;
import org.zanata.webtrans.client.rpc.AbstractAsyncCallback;
Expand All @@ -25,6 +29,7 @@
import com.allen_sauer.gwt.log.client.Log;
import com.google.common.base.Objects;
import com.google.common.collect.Lists;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.inject.Inject;
import com.google.inject.Singleton;
Expand All @@ -44,22 +49,42 @@ public class TranslationHistoryPresenter extends WidgetPresenter<TranslationHist
private final CachingDispatchAsync dispatcher;
private final WebTransMessages messages;
private final GetTransUnitActionContextHolder contextHolder;
private final KeyShortcutPresenter keyShortcutPresenter;
private TargetContentsPresenter targetContentsPresenter;
private TransUnitId transUnitId;
private ComparingPair comparingPair = ComparingPair.empty();

@Inject
public TranslationHistoryPresenter(TranslationHistoryDisplay display, EventBus eventBus, CachingDispatchAsync dispatcher, WebTransMessages messages, GetTransUnitActionContextHolder contextHolder)
public TranslationHistoryPresenter(TranslationHistoryDisplay display, EventBus eventBus, CachingDispatchAsync dispatcher, WebTransMessages messages, GetTransUnitActionContextHolder contextHolder, KeyShortcutPresenter keyShortcutPresenter)
{
super(display, eventBus);
this.display = display;
this.eventBus = eventBus;
this.dispatcher = dispatcher;
this.messages = messages;
this.contextHolder = contextHolder;
this.keyShortcutPresenter = keyShortcutPresenter;

display.setListener(this);
eventBus.addHandler(ReviewCommentEvent.TYPE, this);
registerKeyShortcut();
}

private void registerKeyShortcut()
{
KeyShortcut confirmShortcut = KeyShortcut.Builder.builder()
.addKey(new Keys(Keys.CTRL_KEY, KeyCodes.KEY_ENTER))
.setContext(ShortcutContext.TransHistoryPopup)
.setHandler(new KeyShortcutEventHandler()
{
@Override
public void onKeyShortcut(KeyShortcutEvent event)
{
addComment(display.getComment());
}
})
.build();
keyShortcutPresenter.register(confirmShortcut);
}

@Override
Expand Down
Expand Up @@ -557,6 +557,6 @@ public interface WebTransMessages extends Messages
@DefaultMessage("Why is this translation rejected?")
String rejectCommentTitle();

@DefaultMessage("Confirm rejection")
@DefaultMessage("Confirm rejection (ctrl + enter)")
String confirmRejection();
}
Expand Up @@ -29,7 +29,7 @@
<g:TextArea name="comment" styleName="basic-input" ui:field="commentTextArea" />
</div>
<div class="w--2-12 g__item">
<g:Button addStyleNames="button--full" text="Add Comment" ui:field="addCommentButton" />
<g:Button addStyleNames="button--full" text="Add Comment" title="Ctrl + Enter" ui:field="addCommentButton" />
</div>
</g:HTMLPanel>
</ui:UiBinder>
Expand Up @@ -12,48 +12,26 @@
*/
public class ShortcutContextAwareDialogBox extends DialogBox
{
private final ShortcutContext shortcutContext;
private final KeyShortcutPresenter keyShortcutPresenter;
private Set<ShortcutContext> activeContext = Collections.emptySet();

public ShortcutContextAwareDialogBox(KeyShortcutPresenter keyShortcutPresenter)
{
super();
this.keyShortcutPresenter = keyShortcutPresenter;
}

public ShortcutContextAwareDialogBox(boolean autoHide, KeyShortcutPresenter keyShortcutPresenter)
{
super(autoHide);
this.keyShortcutPresenter = keyShortcutPresenter;
}

public ShortcutContextAwareDialogBox(Caption captionWidget, KeyShortcutPresenter keyShortcutPresenter)
{
super(captionWidget);
this.keyShortcutPresenter = keyShortcutPresenter;
}

public ShortcutContextAwareDialogBox(boolean autoHide, boolean modal, KeyShortcutPresenter keyShortcutPresenter)
public ShortcutContextAwareDialogBox(boolean autoHide, boolean modal, ShortcutContext shortcutContext, KeyShortcutPresenter keyShortcutPresenter)
{
super(autoHide, modal);
this.keyShortcutPresenter = keyShortcutPresenter;
}

public ShortcutContextAwareDialogBox(boolean autoHide, boolean modal, Caption captionWidget, KeyShortcutPresenter keyShortcutPresenter)
{
super(autoHide, modal, captionWidget);
this.shortcutContext = shortcutContext;
this.keyShortcutPresenter = keyShortcutPresenter;
}

@Override
public void hide()
{
super.hide();
keyShortcutPresenter.setContextActive(ShortcutContext.Popup, false);
for (ShortcutContext shortcutContext : activeContext)
{
keyShortcutPresenter.setContextActive(shortcutContext, true);
}
keyShortcutPresenter.setContextActive(shortcutContext, false);
}

@Override
Expand All @@ -65,6 +43,6 @@ public void show()
{
keyShortcutPresenter.setContextActive(shortcutContext, false);
}
keyShortcutPresenter.setContextActive(ShortcutContext.Popup, true);
keyShortcutPresenter.setContextActive(shortcutContext, true);
}
}
Expand Up @@ -34,6 +34,8 @@ public interface TranslationHistoryDisplay extends WidgetDisplay

void clearInput();

String getComment();

interface Listener extends ForceReviewCommentDisplay.Listener
{

Expand Down
Expand Up @@ -2,6 +2,7 @@

import java.util.List;

import org.zanata.webtrans.client.keys.ShortcutContext;
import org.zanata.webtrans.client.presenter.KeyShortcutPresenter;
import org.zanata.webtrans.client.resources.WebTransMessages;
import org.zanata.webtrans.shared.model.ComparableByDate;
Expand Down Expand Up @@ -46,7 +47,7 @@ public class TranslationHistoryView extends ShortcutContextAwareDialogBox implem
@Inject
public TranslationHistoryView(ContentStateRenderer stateRenderer, KeyShortcutPresenter keyShortcutPresenter)
{
super(true, true, keyShortcutPresenter);
super(true, true, ShortcutContext.TransHistoryPopup, keyShortcutPresenter);
this.stateRenderer = stateRenderer;
closeButton = new DialogBoxCloseButton(this);
HTMLPanel container = uiBinder.createAndBindUi(this);
Expand Down Expand Up @@ -94,6 +95,12 @@ public void clearInput()
commentInput.setText("");
}

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

@Override
public void showDiff(TransHistoryItem one, TransHistoryItem two, String description)
{
Expand Down
Expand Up @@ -21,6 +21,7 @@

package org.zanata.webtrans.client.view;

import org.zanata.webtrans.client.keys.ShortcutContext;
import org.zanata.webtrans.client.presenter.KeyShortcutPresenter;
import org.zanata.webtrans.client.resources.WebTransMessages;
import org.zanata.webtrans.client.ui.DialogBoxCloseButton;
Expand All @@ -41,7 +42,7 @@ public class ForceReviewCommentWidget extends ShortcutContextAwareDialogBox impl
@Inject
public ForceReviewCommentWidget(WebTransMessages messages, KeyShortcutPresenter keyShortcutPresenter)
{
super(false, true, keyShortcutPresenter);
super(false, true, ShortcutContext.RejectConfirmationPopup, keyShortcutPresenter);
setGlassEnabled(true);

setText(messages.rejectCommentTitle());
Expand Down
Expand Up @@ -34,7 +34,6 @@
import org.zanata.webtrans.client.events.TransUnitSaveEvent;
import org.zanata.webtrans.client.keys.KeyShortcut;
import org.zanata.webtrans.client.keys.ShortcutContext;
import org.zanata.webtrans.client.resources.WebTransMessages;
import org.zanata.webtrans.client.rpc.CachingDispatchAsync;
import org.zanata.webtrans.client.service.GetTransUnitActionContextHolder;
import org.zanata.webtrans.client.view.ForceReviewCommentDisplay;
Expand Down Expand Up @@ -70,8 +69,6 @@ public class ForceReviewCommentPresenterTest
private TransUnitSaveEvent saveEvent;
@Mock
private KeyShortcutPresenter keyShortcutPresenter;
@Mock
private WebTransMessages messages;
@Captor
private ArgumentCaptor<KeyShortcut> shortcutCapture;

Expand All @@ -80,14 +77,14 @@ public void setUp() throws Exception
{
MockitoAnnotations.initMocks(this);

presenter = new ForceReviewCommentPresenter(display, eventBus, dispatcher, contextHolder, keyShortcutPresenter, messages);
presenter = new ForceReviewCommentPresenter(display, eventBus, dispatcher, contextHolder, keyShortcutPresenter);

verify(display).setListener(presenter);
verify(eventBus).addHandler(CommentBeforeSaveEvent.TYPE, presenter);
verify(keyShortcutPresenter).register(shortcutCapture.capture());

KeyShortcut keyShortcut = shortcutCapture.getValue();
assertThat(keyShortcut.getContext(), Matchers.equalTo(ShortcutContext.Popup));
assertThat(keyShortcut.getContext(), Matchers.equalTo(ShortcutContext.RejectConfirmationPopup));
}

@Test
Expand Down
Expand Up @@ -8,13 +8,17 @@
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import org.zanata.common.ContentState;
import org.zanata.webtrans.client.events.CopyDataToEditorEvent;
import org.zanata.webtrans.client.events.KeyShortcutEvent;
import org.zanata.webtrans.client.events.NotificationEvent;
import org.zanata.webtrans.client.events.ReviewCommentEvent;
import org.zanata.webtrans.client.keys.KeyShortcut;
import org.zanata.webtrans.client.keys.Keys;
import org.zanata.webtrans.client.resources.WebTransMessages;
import org.zanata.webtrans.client.rpc.CachingDispatchAsync;
import org.zanata.webtrans.client.service.GetTransUnitActionContextHolder;
Expand All @@ -30,6 +34,7 @@
import org.zanata.webtrans.shared.rpc.GetTranslationHistoryAction;
import org.zanata.webtrans.shared.rpc.GetTranslationHistoryResult;
import com.google.common.collect.Lists;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.user.cellview.client.ColumnSortEvent;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.view.client.SelectionChangeEvent;
Expand All @@ -38,6 +43,7 @@
import static org.hamcrest.MatcherAssert.assertThat;
import static org.mockito.Matchers.isA;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

Expand Down Expand Up @@ -69,16 +75,22 @@ public class TranslationHistoryPresenterTest
private final TransUnitId transUnitId = new TransUnitId(1L);
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private GetTransUnitActionContextHolder contextHolder;
@Mock
private KeyShortcutPresenter keyShortcutPresenter;
@Captor
private ArgumentCaptor<KeyShortcut> keyShortcutCapture;

@BeforeMethod
public void beforeMethod()
{
MockitoAnnotations.initMocks(this);
presenter = new TranslationHistoryPresenter(display, eventBus, dispatcher, messages, contextHolder);
presenter = new TranslationHistoryPresenter(display, eventBus, dispatcher, messages, contextHolder, keyShortcutPresenter);
presenter.setCurrentValueHolder(targetContentsPresenter);

doNothing().when(dispatcher).execute(actionCaptor.capture(), resultCaptor.capture());
verify(eventBus).addHandler(ReviewCommentEvent.TYPE, presenter);

verify(keyShortcutPresenter).register(keyShortcutCapture.capture());
}

private static TransHistoryItem historyItem(String versionNum)
Expand Down Expand Up @@ -239,4 +251,16 @@ public void onCompareClickedWhichMakesTwoItems()

}

@Test
public void testKeyShortcutForAddComment()
{
when(display.getComment()).thenReturn("blah");
KeyShortcut keyShortcut = keyShortcutCapture.getValue();

assertThat(keyShortcut.getAllKeys().iterator().next(), Matchers.equalTo(new Keys(Keys.CTRL_KEY, KeyCodes.KEY_ENTER)));
keyShortcut.getHandler().onKeyShortcut(mock(KeyShortcutEvent.class));

verify(display).getComment();
verify(dispatcher).execute(Mockito.isA(AddReviewCommentAction.class), Mockito.isA(AsyncCallback.class));
}
}

0 comments on commit 9879689

Please sign in to comment.