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

Commit

Permalink
Work in progress: centralising keyboard shortcut
Browse files Browse the repository at this point in the history
  • Loading branch information
Alex Eng committed Jun 28, 2012
1 parent 7a8e4f3 commit 7af63df
Show file tree
Hide file tree
Showing 5 changed files with 124 additions and 64 deletions.
Expand Up @@ -111,7 +111,7 @@ public class TargetContentsPresenter implements TargetContentsDisplay.Listener,
private final CachingDispatchAsync dispatcher;

@Inject
public TargetContentsPresenter(Provider<TargetContentsDisplay> displayProvider, final CachingDispatchAsync dispatcher, final Identity identity, final EventBus eventBus, final TableEditorMessages messages, final SourceContentsPresenter sourceContentsPresenter, final UserSessionService sessionService, UserConfigHolder configHolder, WorkspaceContext workspaceContext, Scheduler scheduler, ValidationMessagePanelDisplay validationMessagePanel, final KeyShortcutPresenter keyShortcutPresenter)
public TargetContentsPresenter(Provider<TargetContentsDisplay> displayProvider, final CachingDispatchAsync dispatcher, final Identity identity, final EventBus eventBus, final TableEditorMessages messages, final SourceContentsPresenter sourceContentsPresenter, final UserSessionService sessionService, final UserConfigHolder configHolder, WorkspaceContext workspaceContext, Scheduler scheduler, ValidationMessagePanelDisplay validationMessagePanel, final KeyShortcutPresenter keyShortcutPresenter)
{
this.displayProvider = displayProvider;
this.eventBus = eventBus;
Expand Down Expand Up @@ -170,69 +170,78 @@ public void onKeyShortcut(KeyShortcutEvent event)
}
};

// Register shortcut CTRL+ALT+1 to copy result from TM result 1
keyShortcutPresenter.registerKeyShortcut(new KeyShortcut(KeyShortcut.CTRL_ALT_KEYS, KeyShortcut.KEY_1, ShortcutContext.Edit, messages.copyFromTM("1"), copyTM1Handler));
keyShortcutPresenter.registerKeyShortcut(new KeyShortcut(KeyShortcut.CTRL_ALT_KEYS, KeyShortcut.KEY_1_NUM, ShortcutContext.Edit, messages.copyFromTM("1"), copyTM1Handler, false));

// Register shortcut CTRL+ALT+2 to copy result from TM result 2
keyShortcutPresenter.registerKeyShortcut(new KeyShortcut(KeyShortcut.CTRL_ALT_KEYS, KeyShortcut.KEY_2, ShortcutContext.Edit, messages.copyFromTM("2"), copyTM2Handler));
keyShortcutPresenter.registerKeyShortcut(new KeyShortcut(KeyShortcut.CTRL_ALT_KEYS, KeyShortcut.KEY_2_NUM, ShortcutContext.Edit, messages.copyFromTM("2"), copyTM2Handler, false));

// Register shortcut CTRL+ALT+3 to copy result from TM result 3
keyShortcutPresenter.registerKeyShortcut(new KeyShortcut(KeyShortcut.CTRL_ALT_KEYS, KeyShortcut.KEY_3, ShortcutContext.Edit, messages.copyFromTM("3"), copyTM3Handler));
keyShortcutPresenter.registerKeyShortcut(new KeyShortcut(KeyShortcut.CTRL_ALT_KEYS, KeyShortcut.KEY_3_NUM, ShortcutContext.Edit, messages.copyFromTM("3"), copyTM3Handler, false));


// Register shortcut CTRL+ALT+4 to copy result from TM result 4
keyShortcutPresenter.registerKeyShortcut(new KeyShortcut(KeyShortcut.CTRL_ALT_KEYS, KeyShortcut.KEY_4, ShortcutContext.Edit, messages.copyFromTM("4"), copyTM4Handler));
keyShortcutPresenter.registerKeyShortcut(new KeyShortcut(KeyShortcut.CTRL_ALT_KEYS, KeyShortcut.KEY_4_NUM, ShortcutContext.Edit, messages.copyFromTM("4"), copyTM4Handler, false));



KeyShortcutEventHandler moveNextKeyHandler = new KeyShortcutEventHandler()
{

@Override
public void onKeyShortcut(KeyShortcutEvent event)
{
moveNext(false);
}
};

KeyShortcutEventHandler movePreviousKeyHandler = new KeyShortcutEventHandler()
{

@Override
public void onKeyShortcut(KeyShortcutEvent event)
{
movePrevious(false);
}
};


// Register shortcut ALT+(Down/K) to move next row and open editor
keyShortcutPresenter.registerKeyShortcut(new KeyShortcut(KeyShortcut.ALT_KEY, KeyCodes.KEY_DOWN, ShortcutContext.Edit, messages.moveToNextRow(), moveNextKeyHandler));
keyShortcutPresenter.registerKeyShortcut(new KeyShortcut(KeyShortcut.ALT_KEY, KeyShortcut.KEY_K, ShortcutContext.Edit, messages.moveToNextRow(), moveNextKeyHandler));


// Register shortcut ALT+(Up/J) to move previous row and open editor
keyShortcutPresenter.registerKeyShortcut(new KeyShortcut(KeyShortcut.ALT_KEY, KeyCodes.KEY_UP, ShortcutContext.Edit, messages.moveToPreviousRow(), movePreviousKeyHandler));
keyShortcutPresenter.registerKeyShortcut(new KeyShortcut(KeyShortcut.ALT_KEY, KeyShortcut.KEY_J, ShortcutContext.Edit, messages.moveToPreviousRow(), movePreviousKeyHandler));

keyShortcutPresenter.registerKeyShortcut(new KeyShortcut(KeyShortcut.ALT_KEY, KeyCodes.KEY_PAGEDOWN, ShortcutContext.Edit, messages.moveToNextStateEntry(), new KeyShortcutEventHandler()

// Register shortcut ALT+(PageDown) to move next state entry - if modal
// navigation is enabled
keyShortcutPresenter.registerKeyShortcut(new KeyShortcut(KeyShortcut.ALT_KEY, KeyCodes.KEY_PAGEDOWN, ShortcutContext.Edit, messages.moveToNextStateRow(), new KeyShortcutEventHandler()
{
@Override
public void onKeyShortcut(KeyShortcutEvent event)
{
if(isModalNavEnabled)
if (isModalNavEnabled)
{
moveToNextState(NavTransUnitEvent.NavigationType.NextEntry);
}
}
}));

keyShortcutPresenter.registerKeyShortcut(new KeyShortcut(KeyShortcut.ALT_KEY, KeyCodes.KEY_PAGEUP, ShortcutContext.Edit, messages.moveToNextStateEntry(), new KeyShortcutEventHandler()

// Register shortcut ALT+(PageUp) to move previous state entry - if modal navigation is enabled
keyShortcutPresenter.registerKeyShortcut(new KeyShortcut(KeyShortcut.ALT_KEY, KeyCodes.KEY_PAGEUP, ShortcutContext.Edit, messages.moveToPreviousStateRow(), new KeyShortcutEventHandler()
{
@Override
public void onKeyShortcut(KeyShortcutEvent event)
{
if(isModalNavEnabled)
if (isModalNavEnabled)
{
moveToNextState(NavTransUnitEvent.NavigationType.PrevEntry);
}
}
}));


// Register shortcut CTRL+S to save as fuzzy
keyShortcutPresenter.registerKeyShortcut(new KeyShortcut(KeyShortcut.CTRL_KEY, KeyShortcut.KEY_S, ShortcutContext.Edit, messages.saveAsFuzzy(), new KeyShortcutEventHandler()
{
@Override
Expand All @@ -241,6 +250,43 @@ public void onKeyShortcut(KeyShortcutEvent event)
saveAsFuzzy();
}
}, KeyShortcut.KEY_DOWN_EVENT, true, true, true));

// Register shortcut CTRL+ENTER to save as approved
keyShortcutPresenter.registerKeyShortcut(new KeyShortcut(KeyShortcut.CTRL_KEY, KeyCodes.KEY_ENTER, ShortcutContext.Edit, messages.saveAsApproved(), new KeyShortcutEventHandler()
{
@Override
public void onKeyShortcut(KeyShortcutEvent event)
{
saveAsApprovedAndMoveNext();
}
}, KeyShortcut.KEY_DOWN_EVENT, true, true, true));

// Register shortcut ENTER to save as approved (if configHolder.isButtonEnter() = true)
keyShortcutPresenter.registerKeyShortcut(new KeyShortcut(0, KeyCodes.KEY_ENTER, ShortcutContext.Edit, messages.saveAsApprovedEnter(), new KeyShortcutEventHandler()
{
@Override
public void onKeyShortcut(KeyShortcutEvent event)
{
if (configHolder.isButtonEnter())
{
saveAsApprovedAndMoveNext();
}
}
}, KeyShortcut.KEY_DOWN_EVENT, true, true, true));


// Register shortcut ESC to close editor - (if configHolder.isButtonEsc() = true)
keyShortcutPresenter.registerKeyShortcut(new KeyShortcut(0, KeyCodes.KEY_ESCAPE, ShortcutContext.Edit, messages.closeEditor(), new KeyShortcutEventHandler()
{
@Override
public void onKeyShortcut(KeyShortcutEvent event)
{
if (configHolder.isButtonEsc() && !keyShortcutPresenter.getDisplay().isShowing())
{
onCancel();
}
}
}));
}

private ToggleEditor getCurrentEditor()
Expand Down Expand Up @@ -632,22 +678,6 @@ public void onEditorKeyDown(KeyDownEvent event, ToggleEditor editor)
{
copySource(editor);
}
else if (checkKey.isSaveAsFuzzyKey())
{
// event.stopPropagation();
// event.preventDefault(); // stop browser save
// saveAsFuzzy();
}
else if (checkKey.isSaveAsApprovedKey(configHolder.isButtonEnter()))
{
event.stopPropagation();
event.preventDefault();
saveAsApprovedAndMoveNext();
}
else if (checkKey.isCloseEditorKey(configHolder.isButtonEsc()))
{
onCancel();
}
else if (checkKey.isUserTyping() && checkKey.isEnterKey())
{
// because enter itself will increase one line
Expand Down
Expand Up @@ -71,8 +71,10 @@ public interface Display extends WidgetDisplay
void showPanel();

public void clearPanel();

// hide method not provided as auto-hide is enabled

boolean isShowing();

void hide(boolean autoClosed);
}

/**
Expand All @@ -97,9 +99,12 @@ public KeyShortcutPresenter(Display display, EventBus eventBus, final WebTransMe
keyDisplayMap.put(KeyShortcut.META_KEY, "Meta");
keyDisplayMap.put(KeyShortcut.CTRL_KEY, "Ctrl");

keyDisplayMap.put(KeyCodes.KEY_DOWN, "Down Arrow");
keyDisplayMap.put(KeyCodes.KEY_UP, "Up Arrow");
keyDisplayMap.put(KeyCodes.KEY_DOWN, "Down");
keyDisplayMap.put(KeyCodes.KEY_UP, "Up");
keyDisplayMap.put(KeyCodes.KEY_ENTER, "Enter");
keyDisplayMap.put(KeyCodes.KEY_PAGEDOWN, "Page Down");
keyDisplayMap.put(KeyCodes.KEY_PAGEUP, "Page Up");
keyDisplayMap.put(KeyCodes.KEY_ESCAPE, "Esc");
}

@Override
Expand All @@ -126,11 +131,23 @@ public void onPreviewNativeEvent(NativePreviewEvent event)
}
});

registerKeyShortcut(new KeyShortcut(0, KeyCodes.KEY_ESCAPE, ShortcutContext.Application, messages.closeShortcutView(), new KeyShortcutEventHandler()
{
@Override
public void onKeyShortcut(KeyShortcutEvent event)
{
if(display.isShowing())
{
display.hide(true);
}
}
}));


// could try to use ?, although this is not as simple as passing character
// '?'
registerKeyShortcut(new KeyShortcut(KeyShortcut.ALT_KEY, 'Y', ShortcutContext.Application, messages.showAvailableKeyShortcuts(), new KeyShortcutEventHandler()
{

@Override
public void onKeyShortcut(KeyShortcutEvent event)
{
Expand Down
Expand Up @@ -264,10 +264,7 @@ public void onValueChange(ValueChangeEvent<Boolean> event)
@Override
public void onKeyShortcut(KeyShortcutEvent event)
{
if (isEditorInFocus())
{
translationEditorPresenter.gotoPrevRow(false);
}
translationEditorPresenter.gotoPrevRow(false);
}
};

Expand All @@ -276,40 +273,40 @@ public void onKeyShortcut(KeyShortcutEvent event)
@Override
public void onKeyShortcut(KeyShortcutEvent event)
{
if (isEditorInFocus())
{
translationEditorPresenter.gotoNextRow(false);
}
translationEditorPresenter.gotoNextRow(false);
}
};

// Register shortcut ALT+(UP/J) for previous row navigation
keyShortcutPresenter.registerKeyShortcut(new KeyShortcut(KeyShortcut.ALT_KEY, KeyCodes.KEY_UP, ShortcutContext.Navigation, messages.navigateToNextRow(), gotoPreRowHandler, KeyShortcut.KEY_DOWN_EVENT, true, true, true));
keyShortcutPresenter.registerKeyShortcut(new KeyShortcut(KeyShortcut.ALT_KEY, KeyShortcut.KEY_J, ShortcutContext.Navigation, messages.navigateToNextRow(), gotoPreRowHandler, KeyShortcut.KEY_DOWN_EVENT, true, true, true));

// Register shortcut ALT+(Down/K) for next row navigation
keyShortcutPresenter.registerKeyShortcut(new KeyShortcut(KeyShortcut.ALT_KEY, KeyCodes.KEY_DOWN, ShortcutContext.Navigation, messages.navigateToPreviousRow(), gotoNextRowHandler, KeyShortcut.KEY_DOWN_EVENT, true, true, true));
keyShortcutPresenter.registerKeyShortcut(new KeyShortcut(KeyShortcut.ALT_KEY, KeyShortcut.KEY_K, ShortcutContext.Navigation, messages.navigateToPreviousRow(), gotoNextRowHandler, KeyShortcut.KEY_DOWN_EVENT, true, true, true));


// Register shortcut Enter to open editor in selected row - if no other input field is in focus
keyShortcutPresenter.registerKeyShortcut(new KeyShortcut(0, KeyCodes.KEY_ENTER, ShortcutContext.Navigation, messages.openEditorInSelectedRow(), new KeyShortcutEventHandler()
{
@Override
public void onKeyShortcut(KeyShortcutEvent event)
{
if (isEditorInFocus())
if (!isOtherInputFieldFocused())
{
translationEditorPresenter.openEditorOnSelectedRow();
}
}
}, KeyShortcut.KEY_UP_EVENT, true, true, true));
}

private boolean isEditorInFocus()
private boolean isOtherInputFieldFocused()
{
return !translationEditorPresenter.isTransFilterFocused() &&
!transMemoryPresenter.getDisplay().isFocused() &&
!glossaryPresenter.getDisplay().isFocused() &&
!translationEditorPresenter.getDisplay().isPagerFocused();
return translationEditorPresenter.isTransFilterFocused() ||
transMemoryPresenter.getDisplay().isFocused() ||
glossaryPresenter.getDisplay().isFocused() ||
translationEditorPresenter.getDisplay().isPagerFocused();
}

@Override
protected void onUnbind()
{
Expand All @@ -324,7 +321,8 @@ public void saveEditorPendingChange()
}

/**
* Handle all changes required to completely hide and unbind the south panel for read-only mode, or to undo said changes.
* Handle all changes required to completely hide and unbind the south panel
* for read-only mode, or to undo said changes.
*
* @param readOnly
*/
Expand All @@ -341,26 +339,26 @@ private void setSouthPanelReadOnly(boolean readOnly)
setSouthPanelExpanded(display.getSouthPanelToggle().getValue());
}
}

/**
* Expand or collapse south panel, binding or unbinding presenters
* as appropriate. Will have no effect if the panel is already in
* the state of expansion or contraction that is specified.
* Expand or collapse south panel, binding or unbinding presenters as
* appropriate. Will have no effect if the panel is already in the state of
* expansion or contraction that is specified.
*
* @param expanded
*/
private void setSouthPanelExpanded(boolean expanded)
{
if (expanded == southPanelExpanded)
{
return; //nothing to do
return; // nothing to do
}
display.setSouthPanelExpanded(expanded);
southPanelExpanded = expanded;
if (expanded)
{
bindSouthPanelPresenters();

TransUnit tu = translationEditorPresenter.getSelectedTransUnit();
if (tu != null)
{
Expand All @@ -380,7 +378,7 @@ private void bindSouthPanelPresenters()
glossaryPresenter.bind();
workspaceUsersPresenter.bind();
}

private void unbindSouthPanelPresenters()
{
transMemoryPresenter.unbind();
Expand Down
Expand Up @@ -55,9 +55,21 @@ String validationWarningsHeading(@PluralCount
@DefaultMessage("Move to previous row")
String moveToPreviousRow();

@DefaultMessage("Move to next state entry")
String moveToNextStateEntry();
@DefaultMessage("Move to next state row")
String moveToNextStateRow();

@DefaultMessage("Move to previous state row")
String moveToPreviousStateRow();

@DefaultMessage("Save as fuzzy")
@DefaultMessage("Save changes as fuzzy")
String saveAsFuzzy();

@DefaultMessage("Save changes as approved")
String saveAsApproved();

@DefaultMessage("Save changes as approved - if 'Enter key saves immediately' option enabled")
String saveAsApprovedEnter();

@DefaultMessage("Close opened editor")
String closeEditor();
}
Expand Up @@ -340,4 +340,7 @@ public interface WebTransMessages extends Messages

@DefaultMessage("Open editor in selected row")
String openEditorInSelectedRow();

@DefaultMessage("Close keyboard shortcut list")
String closeShortcutView();
}

0 comments on commit 7af63df

Please sign in to comment.