diff --git a/server/zanata-war/eclipse/launch/webtrans-dummy.launch b/server/zanata-war/eclipse/launch/webtrans-dummy.launch
index a0085ada49..0ca90fb387 100644
--- a/server/zanata-war/eclipse/launch/webtrans-dummy.launch
+++ b/server/zanata-war/eclipse/launch/webtrans-dummy.launch
@@ -20,7 +20,7 @@
-
+
diff --git a/server/zanata-war/eclipse/launch/webtrans-jboss.launch b/server/zanata-war/eclipse/launch/webtrans-jboss.launch
index 58f5868ad6..841e5fbb4d 100644
--- a/server/zanata-war/eclipse/launch/webtrans-jboss.launch
+++ b/server/zanata-war/eclipse/launch/webtrans-jboss.launch
@@ -21,7 +21,7 @@
-
+
diff --git a/server/zanata-war/src/main/java/org/zanata/webtrans/client/Resources.java b/server/zanata-war/src/main/java/org/zanata/webtrans/client/Resources.java
index 32a7f12c86..7336ad34f7 100644
--- a/server/zanata-war/src/main/java/org/zanata/webtrans/client/Resources.java
+++ b/server/zanata-war/src/main/java/org/zanata/webtrans/client/Resources.java
@@ -45,6 +45,9 @@ public interface Resources extends ClientBundle
@Source("org/zanata/webtrans/images/crystal_project/_16x16/actions/rightArrow.png")
ImageResource rightArrowButton();
+ @Source("org/zanata/webtrans/images/crystal_project/_16x16/actions/configure.png")
+ ImageResource configureButton();
+
@Source("org/zanata/webtrans/images/banner_bg.png")
DataResource bannerBackground();
diff --git a/server/zanata-war/src/main/java/org/zanata/webtrans/client/TransUnitNavigationPresenter.java b/server/zanata-war/src/main/java/org/zanata/webtrans/client/TransUnitNavigationPresenter.java
index 93397358f5..495a81b4b9 100644
--- a/server/zanata-war/src/main/java/org/zanata/webtrans/client/TransUnitNavigationPresenter.java
+++ b/server/zanata-war/src/main/java/org/zanata/webtrans/client/TransUnitNavigationPresenter.java
@@ -20,19 +20,25 @@
*/
package org.zanata.webtrans.client;
+import java.util.Map;
+
import net.customware.gwt.presenter.client.EventBus;
import net.customware.gwt.presenter.client.widget.WidgetDisplay;
import net.customware.gwt.presenter.client.widget.WidgetPresenter;
+import org.zanata.common.ContentState;
+import org.zanata.webtrans.client.editor.table.TableConstants;
import org.zanata.webtrans.client.events.NavTransUnitEvent;
import org.zanata.webtrans.client.events.NavTransUnitEvent.NavigationType;
import org.zanata.webtrans.client.events.NavTransUnitHandler;
+import org.zanata.webtrans.client.ui.ShortcutConfigPanel;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.shared.GwtEvent;
import com.google.gwt.event.shared.HandlerRegistration;
+import com.google.gwt.user.client.ui.Widget;
import com.google.inject.Inject;
public class TransUnitNavigationPresenter extends WidgetPresenter implements HasNavTransUnitHandlers
@@ -47,6 +53,12 @@ public interface Display extends WidgetDisplay
HasClickHandlers getPrevFuzzyOrUntranslatedButton();
HasClickHandlers getNextFuzzyOrUntranslatedButton();
+
+ HasClickHandlers getConfigureButton();
+
+ Widget getConfigureButtonObject();
+
+ void setNavModeTooltip(Map configMap);
}
@Inject
@@ -55,6 +67,8 @@ public TransUnitNavigationPresenter(Display display, EventBus eventBus)
super(display, eventBus);
}
+ final ShortcutConfigPanel shortcutConfigPanel = new ShortcutConfigPanel(true, eventBus);
+
@Override
protected void onBind()
{
@@ -94,6 +108,15 @@ public void onClick(ClickEvent event)
}
});
+ display.getConfigureButton().addClickHandler(new ClickHandler()
+ {
+ @Override
+ public void onClick(ClickEvent event)
+ {
+ shortcutConfigPanel.toggleDisplay(display.getConfigureButtonObject());
+ }
+ });
+
}
@Override
diff --git a/server/zanata-war/src/main/java/org/zanata/webtrans/client/TransUnitNavigationView.java b/server/zanata-war/src/main/java/org/zanata/webtrans/client/TransUnitNavigationView.java
index 44e60b03cc..a6fdcdd046 100644
--- a/server/zanata-war/src/main/java/org/zanata/webtrans/client/TransUnitNavigationView.java
+++ b/server/zanata-war/src/main/java/org/zanata/webtrans/client/TransUnitNavigationView.java
@@ -20,6 +20,9 @@
*/
package org.zanata.webtrans.client;
+import java.util.Map;
+
+import org.zanata.common.ContentState;
import org.zanata.webtrans.client.editor.table.NavigationMessages;
import com.google.gwt.core.client.GWT;
@@ -41,7 +44,7 @@ interface TransUnitNavigationViewUiBinder extends UiBinder configMap)
+ {
+ boolean isFuzzy = configMap.get(ContentState.NeedReview);
+ boolean isUntranslated = configMap.get(ContentState.New);
+
+ if (isFuzzy && !isUntranslated)
+ {
+ setFuzzyModeTooltip();
+ }
+ else if (isUntranslated && !isFuzzy)
+ {
+ setUntranslatedModeTooltip();
+ }
+ else
+ {
+ setFuzzyAndUntranslatedModeTooltip();
+ }
+ }
+
+ private void setFuzzyModeTooltip()
+ {
+ prevFuzzyOrUntranslated.setTitle(messages.actionToolTip(messages.prevFuzzy(), messages.prevFuzzyOrUntranslatedShortcut()));
+ nextFuzzyOrUntranslated.setTitle(messages.actionToolTip(messages.nextFuzzy(), messages.nextFuzzyOrUntranslatedShortcut()));
+ }
+
+ private void setUntranslatedModeTooltip()
+ {
+ prevFuzzyOrUntranslated.setTitle(messages.actionToolTip(messages.prevUntranslated(), messages.prevFuzzyOrUntranslatedShortcut()));
+ nextFuzzyOrUntranslated.setTitle(messages.actionToolTip(messages.nextUntranslated(), messages.nextFuzzyOrUntranslatedShortcut()));
+ }
+
+ private void setFuzzyAndUntranslatedModeTooltip()
+ {
prevFuzzyOrUntranslated.setTitle(messages.actionToolTip(messages.prevFuzzyOrUntranslated(), messages.prevFuzzyOrUntranslatedShortcut()));
nextFuzzyOrUntranslated.setTitle(messages.actionToolTip(messages.nextFuzzyOrUntranslated(), messages.nextFuzzyOrUntranslatedShortcut()));
}
@@ -92,4 +132,16 @@ public Widget asWidget()
return this;
}
+ @Override
+ public HasClickHandlers getConfigureButton()
+ {
+ return configure;
+ }
+
+ @Override
+ public Widget getConfigureButtonObject()
+ {
+ return configure;
+ }
+
}
diff --git a/server/zanata-war/src/main/java/org/zanata/webtrans/client/TransUnitNavigationView.ui.xml b/server/zanata-war/src/main/java/org/zanata/webtrans/client/TransUnitNavigationView.ui.xml
index a1cdd39cb6..38581da1bc 100644
--- a/server/zanata-war/src/main/java/org/zanata/webtrans/client/TransUnitNavigationView.ui.xml
+++ b/server/zanata-war/src/main/java/org/zanata/webtrans/client/TransUnitNavigationView.ui.xml
@@ -11,6 +11,7 @@
+
diff --git a/server/zanata-war/src/main/java/org/zanata/webtrans/client/TranslationEditorPresenter.java b/server/zanata-war/src/main/java/org/zanata/webtrans/client/TranslationEditorPresenter.java
index 8b85bfacec..f7040579b8 100644
--- a/server/zanata-war/src/main/java/org/zanata/webtrans/client/TranslationEditorPresenter.java
+++ b/server/zanata-war/src/main/java/org/zanata/webtrans/client/TranslationEditorPresenter.java
@@ -32,10 +32,13 @@
import org.zanata.webtrans.client.editor.table.TableEditorPresenter;
import org.zanata.webtrans.client.events.DocumentSelectionEvent;
import org.zanata.webtrans.client.events.DocumentSelectionHandler;
+import org.zanata.webtrans.client.events.NavConfigChangeEvent;
+import org.zanata.webtrans.client.events.NavConfigChangeHandler;
import org.zanata.webtrans.client.events.TransUnitUpdatedEvent;
import org.zanata.webtrans.client.events.TransUnitUpdatedEventHandler;
import org.zanata.webtrans.client.rpc.CachingDispatchAsync;
import org.zanata.webtrans.client.ui.HasPager;
+import org.zanata.webtrans.client.ui.ShortcutConfigPanel;
import org.zanata.webtrans.shared.model.DocumentId;
import org.zanata.webtrans.shared.model.DocumentInfo;
import org.zanata.webtrans.shared.model.TransUnit;
@@ -150,6 +153,16 @@ public void onDocumentSelected(DocumentSelectionEvent event)
}
}));
registerHandler(eventBus.addHandler(TransUnitUpdatedEvent.getType(), updateHandler));
+
+ registerHandler(eventBus.addHandler(NavConfigChangeEvent.getType(), new NavConfigChangeHandler()
+ {
+ @Override
+ public void onValueChanged(NavConfigChangeEvent event)
+ {
+ transUnitNavigationPresenter.getDisplay().setNavModeTooltip(event.getConfigMap());
+ tableEditorPresenter.getDisplay().getTargetCellEditor().setNavMode(event.getConfigMap());
+ }
+ }));
}
private void requestStatusCount(final DocumentId newDocumentId)
diff --git a/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/table/EditRowCallback.java b/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/table/EditRowCallback.java
index 73efab6337..e75ebf93c2 100644
--- a/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/table/EditRowCallback.java
+++ b/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/table/EditRowCallback.java
@@ -7,7 +7,15 @@ public interface EditRowCallback
void gotoPrevRow(int row);
- void gotoNextFuzzy(int row);
+ void gotoNextFuzzyNewRow(int row);
- void gotoPrevFuzzy(int row);
+ void gotoPrevFuzzyNewRow(int row);
+
+ void gotoNextFuzzyRow(int row);
+
+ void gotoPrevFuzzyRow(int row);
+
+ void gotoNextNewRow(int row);
+
+ void gotoPrevNewRow(int row);
}
diff --git a/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/table/InlineTargetCellEditor.java b/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/table/InlineTargetCellEditor.java
index 5258e87f46..234c403451 100644
--- a/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/table/InlineTargetCellEditor.java
+++ b/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/table/InlineTargetCellEditor.java
@@ -20,6 +20,8 @@
*/
package org.zanata.webtrans.client.editor.table;
+import java.util.Map;
+
import net.customware.gwt.presenter.client.EventBus;
import org.zanata.common.ContentState;
@@ -255,12 +257,12 @@ else if (event.isAltKeyDown() && (event.isUpArrow() || keyCode == TableConstants
else if (event.isAltKeyDown() && keyCode == KeyCodes.KEY_PAGEDOWN)
{
// alt-pagedown
- saveAndMoveNextFuzzy(NavigationType.NextEntry);
+ saveAndMoveNextState(NavigationType.NextEntry);
}
else if (event.isAltKeyDown() && keyCode == KeyCodes.KEY_PAGEUP)
{
// alt-pageup
- saveAndMoveNextFuzzy(NavigationType.PrevEntry);
+ saveAndMoveNextState(NavigationType.PrevEntry);
}
else if (!event.isAltKeyDown() && !event.isControlKeyDown())
{
@@ -311,7 +313,7 @@ else if (!event.isAltKeyDown() && !event.isControlKeyDown())
Image fuzzyButton = new Image(images.cellEditorFuzzy());
fuzzyButton.setStyleName("gwt-Button");
- fuzzyButton.setTitle(messages.fuzzy());
+ fuzzyButton.setTitle(messages.saveAsFuzzy());
fuzzyButton.addClickHandler(fuzzyHandler);
operationsPanel.add(saveButton);
@@ -332,15 +334,39 @@ else if (nav == NavigationType.PrevEntry)
}
}
+ private void gotoNewRow(NavigationType nav)
+ {
+ if (nav == NavigationType.NextEntry)
+ {
+ editRowCallback.gotoNextNewRow(curRow);
+ }
+ else if (nav == NavigationType.PrevEntry)
+ {
+ editRowCallback.gotoPrevNewRow(curRow);
+ }
+ }
+
+ private void gotoFuzzyAndNewRow(NavigationType nav)
+ {
+ if (nav == NavigationType.NextEntry)
+ {
+ editRowCallback.gotoNextFuzzyNewRow(curRow);
+ }
+ else if (nav == NavigationType.PrevEntry)
+ {
+ editRowCallback.gotoPrevFuzzyNewRow(curRow);
+ }
+ }
+
private void gotoFuzzyRow(NavigationType nav)
{
if (nav == NavigationType.NextEntry)
{
- editRowCallback.gotoNextFuzzy(curRow);
+ editRowCallback.gotoNextFuzzyRow(curRow);
}
else if (nav == NavigationType.PrevEntry)
{
- editRowCallback.gotoPrevFuzzy(curRow);
+ editRowCallback.gotoPrevFuzzyRow(curRow);
}
}
@@ -440,10 +466,24 @@ public void savePendingChange(boolean cancelIfUnchanged)
}
}
- public void saveAndMoveNextFuzzy(NavigationType nav)
+ private boolean newMode = true, fuzzyMode = true;
+
+ public void saveAndMoveNextState(NavigationType nav)
{
savePendingChange(true);
- gotoFuzzyRow(nav);
+
+ if (newMode && fuzzyMode)
+ {
+ gotoFuzzyAndNewRow(nav);
+ }
+ else if (newMode)
+ {
+ gotoNewRow(nav);
+ }
+ else if (fuzzyMode)
+ {
+ gotoFuzzyRow(nav);
+ }
}
/**
@@ -569,4 +609,10 @@ public void autoSize()
textArea.setVisibleLines(textArea.getVisibleLines() + growByLines);
}
}
+
+ public void setNavMode(Map configMap)
+ {
+ newMode = configMap.get(ContentState.New);
+ fuzzyMode = configMap.get(ContentState.NeedReview);
+ }
}
diff --git a/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/table/NavigationCacheCallback.java b/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/table/NavigationCacheCallback.java
index cbdad0c34a..1408822e91 100644
--- a/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/table/NavigationCacheCallback.java
+++ b/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/table/NavigationCacheCallback.java
@@ -23,7 +23,7 @@
public interface NavigationCacheCallback
{
- void nextFuzzy();
+ void next(boolean isNewState, boolean isFuzzyState);
- void prevFuzzy();
+ void prev(boolean isNewState, boolean isFuzzyState);
}
diff --git a/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/table/NavigationMessages.java b/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/table/NavigationMessages.java
index 5a4da211d4..d0f8b0cb7b 100644
--- a/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/table/NavigationMessages.java
+++ b/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/table/NavigationMessages.java
@@ -44,6 +44,15 @@ public interface NavigationMessages extends Messages
@DefaultMessage("Next Fuzzy")
String nextFuzzy();
+ @DefaultMessage("Prev Fuzzy")
+ String prevFuzzy();
+
+ @DefaultMessage("Next Untranslated")
+ String nextUntranslated();
+
+ @DefaultMessage("Prev Untranslated")
+ String prevUntranslated();
+
@DefaultMessage("Next Fuzzy or Untranslated")
String nextFuzzyOrUntranslated();
@@ -62,6 +71,9 @@ public interface NavigationMessages extends Messages
@DefaultMessage("Cancel")
String editCancelShortcut();
+ @DefaultMessage("Configure navigation shortcut key")
+ String configurationButton();
+
// @DefaultMessage("Copy")
// String editClone();
@@ -83,7 +95,7 @@ public interface NavigationMessages extends Messages
String actionToolTip(String actionName, String shortcut);
@DefaultMessage("Save as Fuzzy (Ctrl+S)")
- String fuzzy();
+ String saveAsFuzzy();
@DefaultMessage("Source comment: ")
String sourceCommentLabel();
diff --git a/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/table/RedirectingCachedTableModel.java b/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/table/RedirectingCachedTableModel.java
index a68bfecf6f..3626b7cdb4 100644
--- a/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/table/RedirectingCachedTableModel.java
+++ b/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/table/RedirectingCachedTableModel.java
@@ -38,6 +38,18 @@ public void gotoPrevRow(int row)
tableModel.gotoPrevRow(row);
}
+ public void gotoNextFuzzyNew(int row)
+ {
+ if (tableModel != null)
+ tableModel.gotoNextFuzzyNew(row);
+ }
+
+ public void gotoPrevFuzzyNew(int row)
+ {
+ if (tableModel != null)
+ tableModel.gotoPrevFuzzyNew(row);
+ }
+
public void gotoNextFuzzy(int row)
{
if (tableModel != null)
@@ -50,6 +62,18 @@ public void gotoPrevFuzzy(int row)
tableModel.gotoPrevFuzzy(row);
}
+ public void gotoNextNew(int row)
+ {
+ if (tableModel != null)
+ tableModel.gotoNextNew(row);
+ }
+
+ public void gotoPrevNew(int row)
+ {
+ if (tableModel != null)
+ tableModel.gotoPrevNew(row);
+ }
+
public void setRowValueOverride(int row, RowType rowValue)
{
// TODO ideally, we would just replace the affected row in the cache
diff --git a/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/table/RedirectingTableModel.java b/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/table/RedirectingTableModel.java
index 628f74dc10..f2ec488c9b 100644
--- a/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/table/RedirectingTableModel.java
+++ b/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/table/RedirectingTableModel.java
@@ -79,6 +79,18 @@ public void gotoPrevRow(int row)
tableModelHandler.gotoPrevRow(row);
}
+ public void gotoNextFuzzyNew(int row)
+ {
+ if (tableModelHandler != null)
+ tableModelHandler.nextFuzzyNewIndex(row);
+ }
+
+ public void gotoPrevFuzzyNew(int row)
+ {
+ if (tableModelHandler != null)
+ tableModelHandler.prevFuzzyNewIndex(row);
+ }
+
public void gotoNextFuzzy(int row)
{
if (tableModelHandler != null)
@@ -90,4 +102,16 @@ public void gotoPrevFuzzy(int row)
if (tableModelHandler != null)
tableModelHandler.prevFuzzyIndex(row);
}
+
+ public void gotoNextNew(int row)
+ {
+ if (tableModelHandler != null)
+ tableModelHandler.nextNewIndex(row);
+ }
+
+ public void gotoPrevNew(int row)
+ {
+ if (tableModelHandler != null)
+ tableModelHandler.prevNewIndex(row);
+ }
}
diff --git a/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/table/TableEditorPresenter.java b/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/table/TableEditorPresenter.java
index d6c9f6ae68..068855bd0b 100644
--- a/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/table/TableEditorPresenter.java
+++ b/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/table/TableEditorPresenter.java
@@ -143,9 +143,15 @@ public interface Display extends WidgetDisplay, HasPageNavigation
private final Identity identity;
private TransUnit selectedTransUnit;
// private int lastRowNum;
+ private List transIdNextNewFuzzyCache = new ArrayList();
+ private List transIdPrevNewFuzzyCache = new ArrayList();
+
private List transIdNextFuzzyCache = new ArrayList();
private List transIdPrevFuzzyCache = new ArrayList();
+ private List transIdNextNewCache = new ArrayList();
+ private List transIdPrevNewCache = new ArrayList();
+
private int curRowIndex;
private int curPage;
@@ -293,10 +299,10 @@ public void onTransUnitUpdated(TransUnitUpdatedEvent event)
if (documentId != null && documentId.equals(event.getDocumentId()))
{
// Clear the cache
- if (!transIdNextFuzzyCache.isEmpty())
- transIdNextFuzzyCache.clear();
- if (!transIdPrevFuzzyCache.isEmpty())
- transIdPrevFuzzyCache.clear();
+ if (!transIdNextNewFuzzyCache.isEmpty())
+ transIdNextNewFuzzyCache.clear();
+ if (!transIdPrevNewFuzzyCache.isEmpty())
+ transIdPrevNewFuzzyCache.clear();
// TODO this test never succeeds
if (selectedTransUnit != null && selectedTransUnit.getId().equals(event.getTransUnit().getId()))
{
@@ -407,12 +413,12 @@ public void onNavTransUnit(NavTransUnitEvent event)
if (event.getRowType() == NavigationType.PrevFuzzyOrUntranslated)
{
- editor.saveAndMoveNextFuzzy(NavigationType.PrevEntry);
+ editor.saveAndMoveNextState(NavigationType.PrevEntry);
}
if (event.getRowType() == NavigationType.NextFuzzyOrUntranslated)
{
- editor.saveAndMoveNextFuzzy(NavigationType.NextEntry);
+ editor.saveAndMoveNextState(NavigationType.NextEntry);
}
}
@@ -616,11 +622,19 @@ public void onCancel(TransUnit rowValue)
// stopEditing(rowValue);
}
- @Override
- public void gotoNextRow(int row)
+ public void updatePageAndRowIndex(int row)
{
curPage = display.getCurrentPage();
+
+ // Convert row number to row Index in table
curRowIndex = curPage * TableConstants.PAGE_SIZE + row;
+ Log.info("Current Row Index" + curRowIndex);
+ }
+
+ @Override
+ public void gotoNextRow(int row)
+ {
+ updatePageAndRowIndex(row);
int rowIndex = curPage * TableConstants.PAGE_SIZE + row + 1;
if (rowIndex < display.getTableModel().getRowCount())
{
@@ -631,8 +645,7 @@ public void gotoNextRow(int row)
@Override
public void gotoPrevRow(int row)
{
- curPage = display.getCurrentPage();
- curRowIndex = curPage * TableConstants.PAGE_SIZE + row;
+ updatePageAndRowIndex(row);
int rowIndex = curPage * TableConstants.PAGE_SIZE + row - 1;
if (rowIndex >= 0)
{
@@ -640,26 +653,52 @@ public void gotoPrevRow(int row)
}
}
+ @Override
+ public void nextFuzzyNewIndex(int row)
+ {
+ updatePageAndRowIndex(row);
+ if (curRowIndex < display.getTableModel().getRowCount())
+ gotoNextState(true, true);
+ }
+
+ @Override
+ public void prevFuzzyNewIndex(int row)
+ {
+ updatePageAndRowIndex(row);
+ if (curRowIndex > 0)
+ gotoPrevState(true, true);
+ }
+
@Override
public void nextFuzzyIndex(int row)
{
- // Convert row number to row Index in table
- curPage = display.getCurrentPage();
- curRowIndex = curPage * TableConstants.PAGE_SIZE + row;
- Log.info("Current Row Index" + curRowIndex);
+ updatePageAndRowIndex(row);
if (curRowIndex < display.getTableModel().getRowCount())
- gotoNextState();
+ gotoNextState(false, true);
}
@Override
public void prevFuzzyIndex(int row)
{
- // Convert row number to row Index in table
- curPage = display.getCurrentPage();
- curRowIndex = curPage * TableConstants.PAGE_SIZE + row;
- Log.info("Current Row Index" + curRowIndex);
+ updatePageAndRowIndex(row);
+ if (curRowIndex > 0)
+ gotoPrevState(false, true);
+ }
+
+ @Override
+ public void nextNewIndex(int row)
+ {
+ updatePageAndRowIndex(row);
+ if (curRowIndex < display.getTableModel().getRowCount())
+ gotoNextState(true, false);
+ }
+
+ @Override
+ public void prevNewIndex(int row)
+ {
+ updatePageAndRowIndex(row);
if (curRowIndex > 0)
- gotoPrevState();
+ gotoPrevState(true, false);
}
@Override
@@ -706,10 +745,10 @@ public void onFailure(Throwable caught)
boolean isReqComplete = true;
- private void cacheNextFuzzy(final NavigationCacheCallback callBack)
+ private void cacheNextState(final NavigationCacheCallback callBack, final List cacheList, final boolean isNewState, final boolean isFuzzyState)
{
isReqComplete = false;
- dispatcher.execute(new GetTransUnitsNavigation(selectedTransUnit.getId().getId(), 3, false, findMessage), new AsyncCallback()
+ dispatcher.execute(new GetTransUnitsNavigation(selectedTransUnit.getId().getId(), 3, false, findMessage, isNewState, isFuzzyState), new AsyncCallback()
{
@Override
public void onSuccess(GetTransUnitsNavigationResult result)
@@ -719,9 +758,9 @@ public void onSuccess(GetTransUnitsNavigationResult result)
{
for (Long offset : result.getUnits())
{
- transIdNextFuzzyCache.add(offset + curRowIndex);
+ cacheList.add(offset + curRowIndex);
}
- callBack.nextFuzzy();
+ callBack.next(isNewState, isFuzzyState);
}
}
@@ -733,10 +772,10 @@ public void onFailure(Throwable caught)
});
}
- private void cachePrevFuzzy(final NavigationCacheCallback callBack)
+ private void cachePrevState(final NavigationCacheCallback callBack, final List cacheList, final boolean isNewState, final boolean isFuzzyState)
{
isReqComplete = false;
- dispatcher.execute(new GetTransUnitsNavigation(selectedTransUnit.getId().getId(), 3, true, findMessage), new AsyncCallback()
+ dispatcher.execute(new GetTransUnitsNavigation(selectedTransUnit.getId().getId(), 3, true, findMessage, isNewState, isFuzzyState), new AsyncCallback()
{
@Override
public void onSuccess(GetTransUnitsNavigationResult result)
@@ -746,9 +785,9 @@ public void onSuccess(GetTransUnitsNavigationResult result)
{
for (Long offset : result.getUnits())
{
- transIdPrevFuzzyCache.add(curRowIndex - offset);
+ cacheList.add(curRowIndex - offset);
}
- callBack.prevFuzzy();
+ callBack.prev(isNewState, isFuzzyState);
}
}
@@ -760,93 +799,135 @@ public void onFailure(Throwable caught)
});
}
- private void gotoPrevState()
+ NavigationCacheCallback cacheCallback = new NavigationCacheCallback()
+ {
+ @Override
+ public void next(boolean isNewState, boolean isFuzzyState)
+ {
+ gotoNextState(isNewState, isFuzzyState);
+ }
+
+ @Override
+ public void prev(boolean isNewState, boolean isFuzzyState)
+ {
+ gotoPrevState(isNewState, isFuzzyState);
+ }
+
+ };
+
+ private void gotoNextState(boolean isNewState, boolean isFuzzyState)
+ {
+ if (isNewState && isFuzzyState)
+ {
+ Log.info("go to Next Fuzzy Or Untranslated State");
+ transIdPrevNewFuzzyCache.clear();
+ gotoNextState(transIdNextNewFuzzyCache, true, true);
+ }
+ else if (isNewState)
+ {
+ Log.info("go to Next Untranslated State");
+ transIdPrevNewCache.clear();
+ gotoNextState(transIdNextNewCache, true, false);
+ }
+ else if (isFuzzyState)
+ {
+ Log.info("go to Next Fuzzy State");
+ transIdPrevFuzzyCache.clear();
+ gotoNextState(transIdNextFuzzyCache, false, true);
+ }
+ }
+
+ private void gotoPrevState(boolean isNewState, boolean isFuzzyState)
{
- Log.info("Previous FuzzyOrUntranslated State");
+ if (isNewState && isFuzzyState)
+ {
+ Log.info("go to Prev Fuzzy Or Untranslated State");
+ // Clean the cache for Next Fuzzy to avoid issues about cache is
+ // obsolete
+ transIdNextNewFuzzyCache.clear();
+ gotoPrevState(transIdPrevNewFuzzyCache, true, true);
+ }
+ else if (isNewState)
+ {
+ Log.info("go to Prev Untranslated State");
+ // Clean the cache for Next Fuzzy to avoid issues about cache is
+ // obsolete
+ transIdNextNewCache.clear();
+ gotoPrevState(transIdPrevNewCache, true, false);
+ }
+ else if (isFuzzyState)
+ {
+ Log.info("go to Prev Fuzzy State");
+ // Clean the cache for Next Fuzzy to avoid issues about cache is
+ // obsolete
+ transIdNextFuzzyCache.clear();
+ gotoPrevState(transIdPrevFuzzyCache, false, true);
+ }
+ }
- // Clean the cache for Next Fuzzy to avoid issues about cache is
- // obsolete
- transIdNextFuzzyCache.clear();
- // If the catch of fuzzy row is empty and request is complete, generate
+ private void gotoPrevState(List transIdPrevCache, boolean isNewState, boolean isFuzzyState)
+ {
+ // If the catch of row is empty and request is complete, generate
// one
- if (transIdPrevFuzzyCache.isEmpty())
+ if (transIdPrevCache.isEmpty())
{
if (isReqComplete)
- cachePrevFuzzy(cacheCallback);
+ cachePrevState(cacheCallback, transIdPrevCache, isNewState, isFuzzyState);
}
else
{
- int size = transIdPrevFuzzyCache.size();
- int offset = transIdPrevFuzzyCache.get(size - 1).intValue();
+ int size = transIdPrevCache.size();
+ int offset = transIdPrevCache.get(size - 1).intValue();
if (curRowIndex > offset)
{
for (int i = 0; i < size; i++)
{
- int fuzzyRowIndex = transIdPrevFuzzyCache.get(i).intValue();
- if (curRowIndex > fuzzyRowIndex)
+ int newRowIndex = transIdPrevCache.get(i).intValue();
+ if (curRowIndex > newRowIndex)
{
display.getTargetCellEditor().cancelEdit();
- tableModelHandler.gotoRow(fuzzyRowIndex);
+ tableModelHandler.gotoRow(newRowIndex);
break;
}
}
}
else
{
- transIdPrevFuzzyCache.clear();
- cachePrevFuzzy(cacheCallback);
+ transIdPrevCache.clear();
+ cachePrevState(cacheCallback, transIdPrevCache, isNewState, isFuzzyState);
}
}
}
- NavigationCacheCallback cacheCallback = new NavigationCacheCallback()
+ private void gotoNextState(List transIdNextCache, boolean isNewState, boolean isFuzzyState)
{
- @Override
- public void nextFuzzy()
- {
- gotoNextState();
- }
-
- @Override
- public void prevFuzzy()
- {
- gotoPrevState();
- }
-
- };
-
- private void gotoNextState()
- {
- Log.info("go to Next FuzzyOrUntranslated State");
-
- transIdPrevFuzzyCache.clear();
- // If the cache of next fuzzy is empty, generate one
- if (transIdNextFuzzyCache.isEmpty())
+ // If the cache of next is empty, generate one
+ if (transIdNextCache.isEmpty())
{
if (isReqComplete)
- cacheNextFuzzy(cacheCallback);
+ cacheNextState(cacheCallback, transIdNextCache, isNewState, isFuzzyState);
}
else
{
- int size = transIdNextFuzzyCache.size();
- int offset = transIdNextFuzzyCache.get(size - 1).intValue();
+ int size = transIdNextCache.size();
+ int offset = transIdNextCache.get(size - 1).intValue();
if (curRowIndex < offset)
{
for (int i = 0; i < size; i++)
{
- int fuzzyRowIndex = transIdNextFuzzyCache.get(i).intValue();
- if (curRowIndex < fuzzyRowIndex)
+ int newRowIndex = transIdNextCache.get(i).intValue();
+ if (curRowIndex < newRowIndex)
{
display.getTargetCellEditor().cancelEdit();
- tableModelHandler.gotoRow(fuzzyRowIndex);
+ tableModelHandler.gotoRow(newRowIndex);
break;
}
}
}
else
{
- transIdNextFuzzyCache.clear();
- cacheNextFuzzy(cacheCallback);
+ transIdNextCache.clear();
+ cacheNextState(cacheCallback, transIdNextCache, isNewState, isFuzzyState);
}
}
}
@@ -923,10 +1004,10 @@ public void selectTransUnit(TransUnit transUnit)
selectedTransUnit = transUnit;
Log.info("SelectedTransUnit " + selectedTransUnit.getId());
// Clean the cache when we click the new entry
- if (!transIdNextFuzzyCache.isEmpty())
- transIdNextFuzzyCache.clear();
- if (!transIdPrevFuzzyCache.isEmpty())
- transIdPrevFuzzyCache.clear();
+ if (!transIdNextNewFuzzyCache.isEmpty())
+ transIdNextNewFuzzyCache.clear();
+ if (!transIdPrevNewFuzzyCache.isEmpty())
+ transIdPrevNewFuzzyCache.clear();
eventBus.fireEvent(new TransUnitSelectionEvent(selectedTransUnit));
}
diff --git a/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/table/TableEditorTableDefinition.java b/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/table/TableEditorTableDefinition.java
index bc6483bfda..a17159a0b6 100644
--- a/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/table/TableEditorTableDefinition.java
+++ b/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/table/TableEditorTableDefinition.java
@@ -274,16 +274,40 @@ public void gotoPrevRow(int row)
}
@Override
- public void gotoNextFuzzy(int row)
+ public void gotoNextFuzzyNewRow(int row)
+ {
+ tableModel.gotoNextFuzzyNew(row);
+ }
+
+ @Override
+ public void gotoPrevFuzzyNewRow(int row)
+ {
+ tableModel.gotoPrevFuzzyNew(row);
+ }
+
+ @Override
+ public void gotoNextFuzzyRow(int row)
{
tableModel.gotoNextFuzzy(row);
}
@Override
- public void gotoPrevFuzzy(int row)
+ public void gotoPrevFuzzyRow(int row)
{
tableModel.gotoPrevFuzzy(row);
}
+
+ @Override
+ public void gotoNextNewRow(int row)
+ {
+ tableModel.gotoNextNew(row);
+ }
+
+ @Override
+ public void gotoPrevNewRow(int row)
+ {
+ tableModel.gotoPrevNew(row);
+ }
};
this.targetCellEditor = new InlineTargetCellEditor(messages, cancelCallBack, transValueCallBack, eventBus);
diff --git a/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/table/TableModelHandler.java b/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/table/TableModelHandler.java
index 2698ae90e6..74e140a933 100644
--- a/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/table/TableModelHandler.java
+++ b/server/zanata-war/src/main/java/org/zanata/webtrans/client/editor/table/TableModelHandler.java
@@ -25,9 +25,17 @@ protected boolean onRowRemoved(int row)
abstract void gotoPrevRow(int row);
+ abstract void nextFuzzyNewIndex(int row);
+
+ abstract void prevFuzzyNewIndex(int row);
+
abstract void nextFuzzyIndex(int row);
abstract void prevFuzzyIndex(int row);
+ abstract void nextNewIndex(int row);
+
+ abstract void prevNewIndex(int row);
+
abstract void gotoRow(int row);
}
diff --git a/server/zanata-war/src/main/java/org/zanata/webtrans/client/events/NavConfigChangeEvent.java b/server/zanata-war/src/main/java/org/zanata/webtrans/client/events/NavConfigChangeEvent.java
new file mode 100644
index 0000000000..65f72f6080
--- /dev/null
+++ b/server/zanata-war/src/main/java/org/zanata/webtrans/client/events/NavConfigChangeEvent.java
@@ -0,0 +1,57 @@
+package org.zanata.webtrans.client.events;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.zanata.common.ContentState;
+import org.zanata.webtrans.client.editor.table.TableConstants;
+
+import com.google.gwt.event.shared.GwtEvent;
+
+public class NavConfigChangeEvent extends GwtEvent
+{
+
+ /**
+ * Handler type.
+ */
+ private static Type TYPE;
+
+ /**
+ * Gets the type associated with this event.
+ *
+ * @return returns the handler type
+ */
+ public static Type getType()
+ {
+ if (TYPE == null)
+ {
+ TYPE = new Type();
+ }
+ return TYPE;
+ }
+
+ private HashMap configMap;
+
+ public NavConfigChangeEvent(Map configMap)
+ {
+ this.configMap = (HashMap) configMap;
+ }
+
+ public Map getConfigMap()
+ {
+ return configMap;
+ }
+
+ @Override
+ protected void dispatch(NavConfigChangeHandler handler)
+ {
+ handler.onValueChanged(this);
+ }
+
+ @Override
+ public Type getAssociatedType()
+ {
+ return getType();
+ }
+
+}
\ No newline at end of file
diff --git a/server/zanata-war/src/main/java/org/zanata/webtrans/client/events/NavConfigChangeHandler.java b/server/zanata-war/src/main/java/org/zanata/webtrans/client/events/NavConfigChangeHandler.java
new file mode 100644
index 0000000000..ad7ee9f5a1
--- /dev/null
+++ b/server/zanata-war/src/main/java/org/zanata/webtrans/client/events/NavConfigChangeHandler.java
@@ -0,0 +1,8 @@
+package org.zanata.webtrans.client.events;
+
+import com.google.gwt.event.shared.EventHandler;
+
+public interface NavConfigChangeHandler extends EventHandler
+{
+ void onValueChanged(NavConfigChangeEvent event);
+}
\ No newline at end of file
diff --git a/server/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ShortcutConfigPanel.java b/server/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ShortcutConfigPanel.java
new file mode 100644
index 0000000000..1cefe9794a
--- /dev/null
+++ b/server/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ShortcutConfigPanel.java
@@ -0,0 +1,144 @@
+/*
+ * Copyright 2011, Red Hat, Inc. and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.zanata.webtrans.client.ui;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import net.customware.gwt.presenter.client.EventBus;
+
+import org.zanata.common.ContentState;
+import org.zanata.webtrans.client.events.NavConfigChangeEvent;
+
+import com.allen_sauer.gwt.log.client.Log;
+import com.google.gwt.event.logical.shared.ValueChangeEvent;
+import com.google.gwt.event.logical.shared.ValueChangeHandler;
+import com.google.gwt.user.client.ui.CheckBox;
+import com.google.gwt.user.client.ui.DecoratedPopupPanel;
+import com.google.gwt.user.client.ui.FlowPanel;
+import com.google.gwt.user.client.ui.HorizontalPanel;
+import com.google.gwt.user.client.ui.Label;
+import com.google.gwt.user.client.ui.UIObject;
+
+/**
+ *
+ * @author Alex Eng aeng@redhat.com
+ *
+ **/
+public class ShortcutConfigPanel extends DecoratedPopupPanel
+{
+ private final CheckBox fuzzyChk = new CheckBox("Fuzzy");
+ private final CheckBox untranslatedChk = new CheckBox("Untranslated");
+
+ private Map configMap = new HashMap();
+
+ private EventBus eventBus;
+ private boolean isHidden = true;
+
+ public ShortcutConfigPanel(boolean autoHide, EventBus eventBus)
+ {
+ super(autoHide);
+ this.eventBus = eventBus;
+ init();
+ bindEvent();
+ setDefaultValue();
+ }
+
+ private void init()
+ {
+ FlowPanel mainPanel = new FlowPanel();
+ mainPanel.add(new Label("Select navigation options:"));
+
+ HorizontalPanel optionsHP = new HorizontalPanel();
+ optionsHP.setSpacing(5);
+ optionsHP.add(fuzzyChk);
+ optionsHP.add(untranslatedChk);
+ mainPanel.add(optionsHP);
+
+ this.add(mainPanel);
+ }
+
+ private void bindEvent()
+ {
+ fuzzyChk.addValueChangeHandler(new ValueChangeHandler()
+ {
+ @Override
+ public void onValueChange(ValueChangeEvent event)
+ {
+ if (event.getValue() == false && untranslatedChk.getValue() == false)
+ {
+ setDefaultValue();
+ }
+ else
+ {
+ configMap.put(ContentState.NeedReview, event.getValue());
+ }
+ Log.info("Navigation mode changed: Untranslated-" + untranslatedChk.getValue() + " Fuzzy-" + fuzzyChk.getValue());
+ eventBus.fireEvent(new NavConfigChangeEvent(configMap));
+ }
+ });
+
+ untranslatedChk.addValueChangeHandler(new ValueChangeHandler()
+ {
+ @Override
+ public void onValueChange(ValueChangeEvent event)
+ {
+ if (event.getValue() == false && fuzzyChk.getValue() == false)
+ {
+ setDefaultValue();
+ }
+ else
+ {
+ configMap.put(ContentState.New, event.getValue());
+ }
+ Log.info("Navigation mode changed: Untranslated-" + untranslatedChk.getValue() + " Fuzzy-" + fuzzyChk.getValue());
+ eventBus.fireEvent(new NavConfigChangeEvent(configMap));
+ }
+ });
+
+ }
+
+ private void setDefaultValue()
+ {
+ fuzzyChk.setValue(true);
+ untranslatedChk.setValue(true);
+
+ configMap.put(ContentState.NeedReview, true);
+ configMap.put(ContentState.New, true);
+ }
+
+ public void toggleDisplay(final UIObject target)
+ {
+ if (isHidden)
+ {
+ isHidden = false;
+ showRelativeTo(target);
+ }
+ else
+ {
+ isHidden = true;
+ hide();
+ }
+ }
+}
+
+
+
\ No newline at end of file
diff --git a/server/zanata-war/src/main/java/org/zanata/webtrans/server/rpc/GetTransUnitNavigationHandler.java b/server/zanata-war/src/main/java/org/zanata/webtrans/server/rpc/GetTransUnitNavigationHandler.java
index b6e1b3de04..3fdff99762 100644
--- a/server/zanata-war/src/main/java/org/zanata/webtrans/server/rpc/GetTransUnitNavigationHandler.java
+++ b/server/zanata-war/src/main/java/org/zanata/webtrans/server/rpc/GetTransUnitNavigationHandler.java
@@ -94,7 +94,7 @@ public GetTransUnitsNavigationResult execute(GetTransUnitsNavigation action, Exe
step++;
HTextFlow textFlow = textFlowDAO.findById(textFlowId, false);
HTextFlowTarget textFlowTarget = textFlow.getTargets().get(hLocale);
- if (checkNewFuzzyState(textFlowTarget))
+ if (checkStateAndValidate(action.isNewState(), action.isFuzzyState(), textFlowTarget))
{
results.add(step);
log.info("add navigation step: " + step);
@@ -118,7 +118,8 @@ public GetTransUnitsNavigationResult execute(GetTransUnitsNavigation action, Exe
{
step++;
HTextFlowTarget textFlowTarget = textFlow.getTargets().get(hLocale);
- if (checkNewFuzzyState(textFlowTarget))
+ log.info(action.isNewState() + ":" + action.isFuzzyState() + ":" + checkStateAndValidate(action.isNewState(), action.isFuzzyState(), textFlowTarget));
+ if (checkStateAndValidate(action.isNewState(), action.isFuzzyState(), textFlowTarget))
{
results.add(step);
log.info("add navigation step: " + step);
@@ -140,10 +141,36 @@ public void rollback(GetTransUnitsNavigation action, GetTransUnitsNavigationResu
{
}
- private boolean checkNewFuzzyState(HTextFlowTarget textFlowTarget)
+ private boolean checkStateAndValidate(boolean isNewState, boolean isFuzzyState, HTextFlowTarget textFlowTarget)
+ {
+ if (isNewState && isFuzzyState)
+ {
+ return isNewFuzzyState(textFlowTarget);
+ }
+ else if (isFuzzyState)
+ {
+ return isFuzzyState(textFlowTarget);
+ }
+ else if (isNewState)
+ {
+ return isNewState(textFlowTarget);
+ }
+ return false;
+ }
+
+ private boolean isNewFuzzyState(HTextFlowTarget textFlowTarget)
{
return textFlowTarget == null || textFlowTarget.getState() == ContentState.New || textFlowTarget.getState() == ContentState.NeedReview;
}
+ private boolean isFuzzyState(HTextFlowTarget textFlowTarget)
+ {
+ return textFlowTarget != null && textFlowTarget.getState() == ContentState.NeedReview;
+ }
+
+ private boolean isNewState(HTextFlowTarget textFlowTarget)
+ {
+ return textFlowTarget == null || textFlowTarget.getState() == ContentState.New;
+ }
}
diff --git a/server/zanata-war/src/main/java/org/zanata/webtrans/shared/rpc/GetTransUnitsNavigation.java b/server/zanata-war/src/main/java/org/zanata/webtrans/shared/rpc/GetTransUnitsNavigation.java
index a70f378fd3..ea03150b2e 100644
--- a/server/zanata-war/src/main/java/org/zanata/webtrans/shared/rpc/GetTransUnitsNavigation.java
+++ b/server/zanata-war/src/main/java/org/zanata/webtrans/shared/rpc/GetTransUnitsNavigation.java
@@ -31,18 +31,21 @@ public class GetTransUnitsNavigation extends AbstractWorkspaceAction