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

Commit

Permalink
Split EditorOptionsPanel to use MVP architecture
Browse files Browse the repository at this point in the history
	EditorOptionsPanel had both presenter and view logic in a single class, which makes unit testing very problematic.
	As there was not much to the class, the logic and UI was moved into the OptionsPanel and divided between presenter and view as appropriate.
  • Loading branch information
davidmason committed Feb 14, 2012
1 parent 6c57862 commit a8a4b16
Show file tree
Hide file tree
Showing 9 changed files with 230 additions and 297 deletions.
Expand Up @@ -35,28 +35,51 @@
import org.zanata.webtrans.client.events.WorkspaceContextUpdateEvent;
import org.zanata.webtrans.client.events.WorkspaceContextUpdateEventHandler;
import org.zanata.webtrans.client.resources.EditorConfigConstants;
import org.zanata.webtrans.client.ui.EditorOptionsPanel;
import org.zanata.webtrans.shared.model.WorkspaceContext;

import com.allen_sauer.gwt.log.client.Log;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.HasChangeHandlers;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.user.client.ui.HasValue;
import com.google.inject.Inject;

public class OptionsPanelPresenter extends WidgetPresenter<OptionsPanelPresenter.Display>
{
public interface Display extends WidgetDisplay
{
// TODO remove this - inline code between this presenter and displayimpl
// class
void setEditorOptionsPanel(Widget widget);

HasValue<Boolean> getTranslatedChk();

HasValue<Boolean> getNeedReviewChk();

HasValue<Boolean> getUntranslatedChk();

HasValue<Boolean> getEditorButtonsChk();

HasValue<Boolean> getEnterChk();

HasValue<Boolean> getEscChk();

void setEditorOptionsVisible(boolean visible);

void setNavOptionVisible(boolean visible);

void setValidationOptionsVisible(boolean visible);

HasChangeHandlers getFilterOptionsSelect();

// possible filter values
static final String KEY_FUZZY_UNTRANSLATED = "FU";
static final String KEY_FUZZY = "F";
static final String KEY_UNTRANSLATED = "U";

String getSelectedFilter();
}

private final ValidationOptionsPresenter validationOptionsPresenter;
private final EditorOptionsPanel editorOptionsPanel;

private Map<String, Boolean> configMap = new HashMap<String, Boolean>();
private final WorkspaceContext workspaceContext;
Expand All @@ -65,7 +88,6 @@ public interface Display extends WidgetDisplay
public OptionsPanelPresenter(final Display display, final EventBus eventBus, final ValidationOptionsPresenter validationDetailsPresenter, final TransFilterPresenter transFilterPresenter, final WorkspaceContext workspaceContext)
{
super(display, eventBus);
this.editorOptionsPanel = new EditorOptionsPanel();
this.validationOptionsPresenter = validationDetailsPresenter;
this.workspaceContext = workspaceContext;

Expand All @@ -80,24 +102,22 @@ public OptionsPanelPresenter(final Display display, final EventBus eventBus, fin
@Override
public void onValueChange(ValueChangeEvent<Boolean> event)
{
eventBus.fireEvent(new FilterViewEvent(editorOptionsPanel.getTranslatedChk().getValue(), editorOptionsPanel.getNeedReviewChk().getValue(), editorOptionsPanel.getUntranslatedChk().getValue(), false));
eventBus.fireEvent(new FilterViewEvent(display.getTranslatedChk().getValue(), display.getNeedReviewChk().getValue(), display.getUntranslatedChk().getValue(), false));
}
};


@Override
protected void onBind()
{
validationOptionsPresenter.bind();
display.setEditorOptionsPanel(editorOptionsPanel);
if (workspaceContext.isReadOnly())
{
setReadOnly(true);
}

registerHandler(editorOptionsPanel.getTranslatedChk().addValueChangeHandler(filterChangeHandler));
registerHandler(editorOptionsPanel.getNeedReviewChk().addValueChangeHandler(filterChangeHandler));
registerHandler(editorOptionsPanel.getUntranslatedChk().addValueChangeHandler(filterChangeHandler));
registerHandler(display.getTranslatedChk().addValueChangeHandler(filterChangeHandler));
registerHandler(display.getNeedReviewChk().addValueChangeHandler(filterChangeHandler));
registerHandler(display.getUntranslatedChk().addValueChangeHandler(filterChangeHandler));

registerHandler(eventBus.addHandler(FilterViewEvent.getType(), new FilterViewEventHandler()
{
Expand All @@ -106,25 +126,25 @@ public void onFilterView(FilterViewEvent event)
{
if (event.isCancelFilter())
{
editorOptionsPanel.getTranslatedChk().setValue(event.isFilterTranslated(), false);
editorOptionsPanel.getNeedReviewChk().setValue(event.isFilterNeedReview(), false);
editorOptionsPanel.getUntranslatedChk().setValue(event.isFilterUntranslated(), false);
display.getTranslatedChk().setValue(event.isFilterTranslated(), false);
display.getNeedReviewChk().setValue(event.isFilterNeedReview(), false);
display.getUntranslatedChk().setValue(event.isFilterUntranslated(), false);
}

// if filter view, hide model navigation
boolean showingFullList = (event.isFilterTranslated() == event.isFilterNeedReview()) && (event.isFilterTranslated() == event.isFilterUntranslated());
if (showingFullList)
{
editorOptionsPanel.setNavOptionVisible(true);
display.setNavOptionVisible(true);
}
else
{
editorOptionsPanel.setNavOptionVisible(false);
display.setNavOptionVisible(false);
}
}
}));

registerHandler(editorOptionsPanel.getEditorButtonsChk().addValueChangeHandler(new ValueChangeHandler<Boolean>()
registerHandler(display.getEditorButtonsChk().addValueChangeHandler(new ValueChangeHandler<Boolean>()
{
@Override
public void onValueChange(ValueChangeEvent<Boolean> event)
Expand All @@ -134,7 +154,7 @@ public void onValueChange(ValueChangeEvent<Boolean> event)
}
}));

registerHandler(editorOptionsPanel.getEnterChk().addValueChangeHandler(new ValueChangeHandler<Boolean>()
registerHandler(display.getEnterChk().addValueChangeHandler(new ValueChangeHandler<Boolean>()
{
@Override
public void onValueChange(ValueChangeEvent<Boolean> event)
Expand All @@ -145,7 +165,7 @@ public void onValueChange(ValueChangeEvent<Boolean> event)
}
}));

registerHandler(editorOptionsPanel.getEscChk().addValueChangeHandler(new ValueChangeHandler<Boolean>()
registerHandler(display.getEscChk().addValueChangeHandler(new ValueChangeHandler<Boolean>()
{
@Override
public void onValueChange(ValueChangeEvent<Boolean> event)
Expand All @@ -156,31 +176,36 @@ public void onValueChange(ValueChangeEvent<Boolean> event)
}
}));

registerHandler(editorOptionsPanel.getOptionsList().addChangeHandler(new ChangeHandler()
// editor buttons always shown by default
display.getEditorButtonsChk().setValue(true, false);
display.getEnterChk().setValue(configMap.get(EditorConfigConstants.BUTTON_ENTER), false);
display.getEscChk().setValue(configMap.get(EditorConfigConstants.BUTTON_ESC), false);

registerHandler(display.getFilterOptionsSelect().addChangeHandler(new ChangeHandler()
{
@Override
public void onChange(ChangeEvent event)
{
String selectedOption = editorOptionsPanel.getOptionsList().getItemText(editorOptionsPanel.getOptionsList().getSelectedIndex());
if (selectedOption.equals(EditorConfigConstants.OPTION_FUZZY_UNTRANSLATED))
String selectedOption = display.getSelectedFilter();
if (selectedOption.equals(Display.KEY_FUZZY_UNTRANSLATED))
{
configMap.put(EditorConfigConstants.BUTTON_UNTRANSLATED, true);
configMap.put(EditorConfigConstants.BUTTON_FUZZY, true);
}
else if (selectedOption.equals(EditorConfigConstants.OPTION_FUZZY))
else if (selectedOption.equals(Display.KEY_FUZZY))
{
configMap.put(EditorConfigConstants.BUTTON_FUZZY, true);
configMap.put(EditorConfigConstants.BUTTON_UNTRANSLATED, false);
}
else if (selectedOption.equals(EditorConfigConstants.OPTION_UNTRANSLATED))
else if (selectedOption.equals(Display.KEY_UNTRANSLATED))
{
configMap.put(EditorConfigConstants.BUTTON_FUZZY, false);
configMap.put(EditorConfigConstants.BUTTON_UNTRANSLATED, true);
}
eventBus.fireEvent(new UserConfigChangeEvent(configMap));
}
}));

registerHandler(eventBus.addHandler(WorkspaceContextUpdateEvent.getType(), new WorkspaceContextUpdateEventHandler()
{
@Override
Expand All @@ -193,21 +218,10 @@ public void onWorkspaceContextUpdated(WorkspaceContextUpdateEvent event)

void setReadOnly(boolean readOnly)
{
if (readOnly)
{
eventBus.fireEvent(new ButtonDisplayChangeEvent(false));
}
else
{
eventBus.fireEvent(new ButtonDisplayChangeEvent(editorOptionsPanel.getEditorButtonsChk().getValue()));
}

boolean active = !readOnly;
editorOptionsPanel.getEditorButtonsChk().setEnabled(active);
editorOptionsPanel.getEnterChk().setEnabled(active);
editorOptionsPanel.getEscChk().setEnabled(active);

validationOptionsPresenter.setEnabled(active);
boolean displayButtons = readOnly ? false : display.getEditorButtonsChk().getValue();
eventBus.fireEvent(new ButtonDisplayChangeEvent(displayButtons));
display.setEditorOptionsVisible(!readOnly);
display.setValidationOptionsVisible(!readOnly);
}

@Override
Expand Down
Expand Up @@ -43,11 +43,6 @@ public class ValidationOptionsPresenter extends WidgetPresenter<ValidationOption
public interface Display extends WidgetDisplay
{
HasValueChangeHandlers<Boolean> addValidationSelector(String label, String tooltip, boolean enabled);

/**
* enable or disable user interaction with all selectors in the display
*/
void setEnabled(boolean enabled);
}

private ValidationService validationService;
Expand Down Expand Up @@ -86,11 +81,6 @@ protected void onUnbind()
protected void onRevealDisplay()
{
}

public void setEnabled(boolean enabled)
{
display.setEnabled(enabled);
}
}


Expand Down

This file was deleted.

0 comments on commit a8a4b16

Please sign in to comment.