diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/editor/filter/TransFilterView.ui.xml b/zanata-war/src/main/java/org/zanata/webtrans/client/editor/filter/TransFilterView.ui.xml index 40a0e23ef2..a08e88f7e6 100644 --- a/zanata-war/src/main/java/org/zanata/webtrans/client/editor/filter/TransFilterView.ui.xml +++ b/zanata-war/src/main/java/org/zanata/webtrans/client/editor/filter/TransFilterView.ui.xml @@ -5,11 +5,11 @@ .transFilterTextBox { margin: 0px; - font-size: 12px; + font-size: 16px; border: 2px solid #C5C5C5; border-radius: 3px; outline: none; - width:388px; + width:440px; } .transFilterTextBoxEmpty { diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/AppPresenter.java b/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/AppPresenter.java index ab0e487b70..931c886e41 100644 --- a/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/AppPresenter.java +++ b/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/AppPresenter.java @@ -211,6 +211,10 @@ public void showView(MainView viewToShow) { display.setDocumentLabel(selectedDocument.getPath(), selectedDocument.getName()); } + else + { + display.setDocumentLabel("", messages.noDocumentSelected()); + } currentDisplayStats = selectedDocumentStats; translationPresenter.revealDisplay(); searchResultsPresenter.concealDisplay(); @@ -230,14 +234,7 @@ public void showView(MainView viewToShow) break; case Documents: default: - if (selectedDocument != null) - { - display.setDocumentLabel(selectedDocument.getPath(), selectedDocument.getName()); - } - else - { - display.setDocumentLabel("", messages.noDocumentSelected()); - } + display.setDocumentLabel("", messages.documentListTitle()); currentDisplayStats = projectStats; translationPresenter.concealDisplay(); searchResultsPresenter.concealDisplay(); @@ -356,23 +353,26 @@ public void onSearchAndReplaceClicked() } @Override - public void onDocumentListClicked() + public void onEditorClicked() { HistoryToken token = HistoryToken.fromTokenString(history.getToken()); - - if (token.getView().equals(MainView.Documents)) + if (!token.getView().equals(MainView.Editor)) { - if (selectedDocument == null) - { - return; // abort if no doc to edit - } token.setView(MainView.Editor); + history.newItem(token.toTokenString()); } - else + } + + @Override + public void onDocumentListClicked() + { + + HistoryToken token = HistoryToken.fromTokenString(history.getToken()); + if (!token.getView().equals(MainView.Documents)) { token.setView(MainView.Documents); + history.newItem(token.toTokenString()); } - history.newItem(token.toTokenString()); } @Override diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/resources/WebTransMessages.java b/zanata-war/src/main/java/org/zanata/webtrans/client/resources/WebTransMessages.java index 6d8cb438e6..16d3c44524 100644 --- a/zanata-war/src/main/java/org/zanata/webtrans/client/resources/WebTransMessages.java +++ b/zanata-war/src/main/java/org/zanata/webtrans/client/resources/WebTransMessages.java @@ -95,10 +95,10 @@ public interface WebTransMessages extends Messages @DefaultMessage("No document selected") String noDocumentSelected(); - @DefaultMessage("Project-wide Search and Replace") + @DefaultMessage("Project-wide Search & Replace") String projectWideSearchAndReplace(); - @DefaultMessage("Document list") + @DefaultMessage("Documents") String documentListTitle(); @DefaultMessage("{0} has quit workspace") @@ -452,4 +452,7 @@ public interface WebTransMessages extends Messages @DefaultMessage("Concurrent edit detected. Reset value for current row. Your change will be lost.") String concurrentEdit(); + @DefaultMessage("Editor") + String editor(); + } diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/service/HistoryEventHandlerService.java b/zanata-war/src/main/java/org/zanata/webtrans/client/service/HistoryEventHandlerService.java index 44f7ca206d..c89d3d9a60 100644 --- a/zanata-war/src/main/java/org/zanata/webtrans/client/service/HistoryEventHandlerService.java +++ b/zanata-war/src/main/java/org/zanata/webtrans/client/service/HistoryEventHandlerService.java @@ -1,23 +1,22 @@ package org.zanata.webtrans.client.service; +import static com.google.common.base.Objects.equal; +import net.customware.gwt.presenter.client.EventBus; + import org.zanata.webtrans.client.events.DocumentSelectionEvent; import org.zanata.webtrans.client.events.FindMessageEvent; import org.zanata.webtrans.client.history.HistoryToken; import org.zanata.webtrans.client.presenter.AppPresenter; import org.zanata.webtrans.client.presenter.DocumentListPresenter; -import org.zanata.webtrans.client.presenter.MainView; import org.zanata.webtrans.client.presenter.SearchResultsPresenter; import org.zanata.webtrans.shared.model.DocumentId; + import com.allen_sauer.gwt.log.client.Log; -import com.google.common.base.Objects; import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.inject.Inject; import com.google.inject.Singleton; -import net.customware.gwt.presenter.client.EventBus; -import static com.google.common.base.Objects.equal; - /** * @author Patrick Huang pahuang@redhat.com */ @@ -79,14 +78,6 @@ private void processForAppPresenter(HistoryToken token) } Log.info("[gwt-history] document id: " + docId); - // if there is no valid document, don't show the editor - // default to document list instead - if (docId == null && token.getView() == MainView.Editor) - { - Log.warn("[gwt-history] access editor view with invalid document id. Showing document list view instead"); - token.setView(MainView.Documents); - } - if (docId != null) { eventBus.fireEvent(new DocumentSelectionEvent(docId, token.getSearchText())); diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/Pager.ui.xml b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/Pager.ui.xml index ffa5b47fff..ca6a0bbb95 100644 --- a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/Pager.ui.xml +++ b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/Pager.ui.xml @@ -6,7 +6,7 @@ .nav-button { - padding:0 6px 1px 6px; + padding:0 6px; font-size:14px; margin:0; } diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/view/AppDisplay.java b/zanata-war/src/main/java/org/zanata/webtrans/client/view/AppDisplay.java index c7a86fb287..9145c6a3ea 100644 --- a/zanata-war/src/main/java/org/zanata/webtrans/client/view/AppDisplay.java +++ b/zanata-war/src/main/java/org/zanata/webtrans/client/view/AppDisplay.java @@ -1,10 +1,9 @@ package org.zanata.webtrans.client.view; +import net.customware.gwt.presenter.client.widget.WidgetDisplay; + import org.zanata.common.TranslationStats; import org.zanata.webtrans.client.presenter.MainView; -import com.google.gwt.event.dom.client.HasClickHandlers; - -import net.customware.gwt.presenter.client.widget.WidgetDisplay; /** * @author Patrick Huang pahuang@redhat.com @@ -45,5 +44,7 @@ interface Listener void onKeyShortcutsClicked(); void onResizeClicked(); + + void onEditorClicked(); } } diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/view/AppView.java b/zanata-war/src/main/java/org/zanata/webtrans/client/view/AppView.java index c68f8771ff..24efc78804 100644 --- a/zanata-war/src/main/java/org/zanata/webtrans/client/view/AppView.java +++ b/zanata-war/src/main/java/org/zanata/webtrans/client/view/AppView.java @@ -36,6 +36,7 @@ import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.dom.client.StyleInjector; import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.logical.shared.SelectionEvent; import com.google.gwt.resources.client.CssResource; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; @@ -44,6 +45,7 @@ import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.InlineLabel; import com.google.gwt.user.client.ui.LayoutPanel; +import com.google.gwt.user.client.ui.TabLayoutPanel; import com.google.gwt.user.client.ui.Widget; import com.google.inject.Inject; @@ -64,35 +66,35 @@ interface Styles extends CssResource TransUnitCountBar translationStatsBar; @UiField - InlineLabel projectLink, iterationFilesLink, resize, keyShortcuts; + InlineLabel projectLink, iterationFilesLink, readOnlyLabel, resize, keyShortcuts; - @UiField - InlineLabel readOnlyLabel, searchAndReplace, documentList; - @UiField SpanElement selectedDocumentSpan, selectedDocumentPathSpan; @UiField - LayoutPanel editorContainer, sideMenuContainer, rootContainer; + LayoutPanel sideMenuContainer, rootContainer; @UiField(provided = true) final Resources resources; + @UiField + TabLayoutPanel contentBody; + @UiField Styles style; private Listener listener; - // TODO may be able to make these provided=true widgets - private Widget documentListView; - private Widget translationView; - private Widget searchResultsView; - private final WebTransMessages messages; private final static String STYLE_MAXIMIZE = "icon-resize-full-3"; private final static String STYLE_MINIMIZE = "icon-resize-small-2"; + // Order of the tab + private final static int DOCUMENT_VIEW = 0; + private final static int EDITOR_VIEW = 1; + private final static int SEARCH_AND_REPLACE_VIEW = 2; + @Inject public AppView(Resources resources, WebTransMessages messages, DocumentListPresenter.Display documentListView, SearchResultsPresenter.Display searchResultsView, TranslationPresenter.Display translationView, SideMenuPresenter.Display sideMenuView, final Identity identity) { @@ -111,26 +113,27 @@ public AppView(Resources resources, WebTransMessages messages, DocumentListPrese readOnlyLabel.setText("[" + messages.readOnly() + "]"); keyShortcuts.setTitle(messages.availableKeyShortcutsTitle()); - searchAndReplace.setTitle(messages.projectWideSearchAndReplace()); - documentList.setTitle(messages.documentListTitle()); resize.setTitle(messages.maximize()); resize.addStyleName(STYLE_MAXIMIZE); - this.searchResultsView = searchResultsView.asWidget(); - this.editorContainer.add(this.searchResultsView); + sideMenuContainer.add(sideMenuView.asWidget()); - this.translationView = translationView.asWidget(); - this.editorContainer.add(this.translationView); + InlineLabel searchAndReplaceTab = new InlineLabel(); + searchAndReplaceTab.addStyleName("icon-search"); + searchAndReplaceTab.setText(messages.projectWideSearchAndReplace()); - this.documentListView = documentListView.asWidget(); - this.editorContainer.add(this.documentListView); + InlineLabel documentListTab = new InlineLabel(); + documentListTab.addStyleName("icon-list"); + documentListTab.setText(messages.documentListTitle()); - sideMenuContainer.add(sideMenuView.asWidget()); + InlineLabel editorTab = new InlineLabel(); + editorTab.addStyleName("icon-edit"); + editorTab.setText(messages.editor()); - setWidgetVisible(this.documentListView, false); - setWidgetVisible(this.searchResultsView, false); - setWidgetVisible(this.translationView, false); + contentBody.add(documentListView.asWidget(), documentListTab); + contentBody.add(translationView.asWidget(), editorTab); + contentBody.add(searchResultsView.asWidget(), searchAndReplaceTab); Window.enableScrolling(false); } @@ -141,41 +144,24 @@ public Widget asWidget() return this; } + @Override public void showInMainView(MainView view) { switch (view) { case Documents: - setWidgetVisible(documentListView, true); - setWidgetVisible(searchResultsView, false); - setWidgetVisible(translationView, false); + contentBody.selectTab(DOCUMENT_VIEW); break; case Search: - setWidgetVisible(documentListView, false); - setWidgetVisible(searchResultsView, true); - setWidgetVisible(translationView, false); + contentBody.selectTab(SEARCH_AND_REPLACE_VIEW); break; case Editor: - setWidgetVisible(documentListView, false); - setWidgetVisible(searchResultsView, false); - setWidgetVisible(translationView, true); + contentBody.selectTab(EDITOR_VIEW); break; } } - private void setWidgetVisible(Widget widget, boolean visible) - { - if (visible) - { - editorContainer.setWidgetTopBottom(widget, 0, Unit.PX, 0, Unit.PX); - } - else - { - editorContainer.setWidgetTopHeight(widget, 0, Unit.PX, 0, Unit.PX); - } - } - @Override public void setProjectLinkLabel(String workspaceNameLabel) { @@ -255,12 +241,12 @@ public void showSideMenu(boolean isShowing) rootContainer.forceLayout(); if (isShowing) { - rootContainer.setWidgetLeftRight(editorContainer, 0.0, Unit.PX, MINIMISED_EDITOR_RIGHT, Unit.PX); + rootContainer.setWidgetLeftRight(contentBody, 0.0, Unit.PX, MINIMISED_EDITOR_RIGHT, Unit.PX); rootContainer.setWidgetRightWidth(sideMenuContainer, 0.0, Unit.PX, EXPENDED_MENU_RIGHT, Unit.PX); } else { - rootContainer.setWidgetLeftRight(editorContainer, 0.0, Unit.PX, 0.0, Unit.PX); + rootContainer.setWidgetLeftRight(contentBody, 0.0, Unit.PX, 0.0, Unit.PX); rootContainer.setWidgetRightWidth(sideMenuContainer, 0.0, Unit.PX, MIN_MENU_WIDTH, Unit.PX); } rootContainer.animate(ANIMATE_DURATION); @@ -278,18 +264,6 @@ public void onIterationFilesLinkClick(ClickEvent event) listener.onIterationFilesLinkClicked(); } - @UiHandler("searchAndReplace") - public void onSearchAndReplaceClick(ClickEvent event) - { - listener.onSearchAndReplaceClicked(); - } - - @UiHandler("documentList") - public void onDocumentListIconClick(ClickEvent event) - { - listener.onDocumentListClicked(); - } - @UiHandler("keyShortcuts") public void onKeyShortcutsIconClick(ClickEvent event) { @@ -302,4 +276,25 @@ public void onResizeIconClick(ClickEvent event) listener.onResizeClicked(); } + @UiHandler("contentBody") + public void onSelectionChanged(SelectionEvent event) + { + if (listener != null) + { + switch (event.getSelectedItem()) + { + case SEARCH_AND_REPLACE_VIEW: + listener.onSearchAndReplaceClicked(); + break; + case DOCUMENT_VIEW: + listener.onDocumentListClicked(); + break; + case EDITOR_VIEW: + listener.onEditorClicked(); + break; + } + } + + } + } diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/view/AppView.ui.xml b/zanata-war/src/main/java/org/zanata/webtrans/client/view/AppView.ui.xml index 860850e5a1..131f41c775 100644 --- a/zanata-war/src/main/java/org/zanata/webtrans/client/view/AppView.ui.xml +++ b/zanata-war/src/main/java/org/zanata/webtrans/client/view/AppView.ui.xml @@ -18,7 +18,7 @@ height:100%; } - .editorContainer + .contentBody { margin:5px 25px 3px 25px; } @@ -60,7 +60,6 @@ .topMenuButton { cursor: pointer; - vertical-align:bottom; font-size:20px; color:#4E4E4E; } @@ -107,12 +106,8 @@ - - - - - - + + @@ -124,7 +119,9 @@ - + + + diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/view/DocumentListView.ui.xml b/zanata-war/src/main/java/org/zanata/webtrans/client/view/DocumentListView.ui.xml index 87a9140220..fad7774c34 100644 --- a/zanata-war/src/main/java/org/zanata/webtrans/client/view/DocumentListView.ui.xml +++ b/zanata-war/src/main/java/org/zanata/webtrans/client/view/DocumentListView.ui.xml @@ -23,12 +23,12 @@ .filterTextBox { - font-size:18px; - padding: 3px; + font-size:16px; + padding: 2px; margin: 0px; border: 2px solid #C5C5C5; border-radius: 3px; - width:98%; + width:440px; } .topBar @@ -39,27 +39,27 @@ .listContainer { - padding:15px; + padding:10px; } - + - + - + Case sensitive - + Exact match only - + diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransUnitEditView.ui.xml b/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransUnitEditView.ui.xml index 680ba39012..0808962dd6 100644 --- a/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransUnitEditView.ui.xml +++ b/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransUnitEditView.ui.xml @@ -20,7 +20,7 @@ border-collapse: collapse; /* setting width to 99% to leave some space from the scroll bar */ width: 99%; - margin: 5px; + margin: 0 5px; table-layout: fixed; } @@ -30,6 +30,7 @@ color: grey; font-size: 1.5em; } + diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/view/TranslationEditorView.java b/zanata-war/src/main/java/org/zanata/webtrans/client/view/TranslationEditorView.java index 45f273f87e..cbd1c42fa7 100644 --- a/zanata-war/src/main/java/org/zanata/webtrans/client/view/TranslationEditorView.java +++ b/zanata-war/src/main/java/org/zanata/webtrans/client/view/TranslationEditorView.java @@ -31,7 +31,7 @@ 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.FlowPanel; +import com.google.gwt.user.client.ui.HTMLPanel; import com.google.gwt.user.client.ui.LayoutPanel; import com.google.gwt.user.client.ui.Widget; import com.google.inject.Inject; @@ -46,7 +46,7 @@ interface TranslationEditorViewUiBinder extends UiBinder + - - - - - + + + + + + + + + - + + + diff --git a/zanata-war/src/main/resources/org/zanata/webtrans/public/Application.css b/zanata-war/src/main/resources/org/zanata/webtrans/public/Application.css index 9f187c3c41..7ecd31e899 100644 --- a/zanata-war/src/main/resources/org/zanata/webtrans/public/Application.css +++ b/zanata-war/src/main/resources/org/zanata/webtrans/public/Application.css @@ -906,3 +906,25 @@ td.ApprovedStateDecoration div div div padding:2px; } +.gwt-TabLayoutPanelTab +{ + padding:3px 5px; + background:darkgray; + color:#595959; + border-top-left-radius:3px; + border-top-right-radius:3px; + margin:0 1px; + border:1px solid #C9C9C9; + cursor:pointer; + + font-weight:bold; + background:-webkit-linear-gradient(top, #F1F1F1 0%, lightGrey 100%); + +} + +.gwt-TabLayoutPanelTab-selected,.gwt-TabLayoutPanelTab:hover +{ + background:#7E91A9; + color:#FFFFFF; +} +