new plotter

This commit is contained in:
Sergey Solovyev
2013-01-13 21:17:11 +04:00
parent 3f09528f45
commit 76719407db
25 changed files with 409 additions and 172 deletions

View File

@@ -86,7 +86,7 @@ public enum CalculatorDisplayMenuItem implements LabeledMenuItem<CalculatorDispl
@Override
protected boolean isItemVisibleFor(@NotNull Generic generic, @NotNull JsclOperation operation) {
return Locator.getInstance().getPlotter().isPlotPossible(generic);
return Locator.getInstance().getPlotter().isPlotPossibleFor(generic);
}
};

View File

@@ -77,24 +77,28 @@ public class AndroidCalculatorPlotter implements CalculatorPlotter, SharedPrefer
return plotter.removeFunction(xyFunction);
}
@NotNull
@Override
public void pin(@NotNull PlotFunction plotFunction) {
plotter.pin(plotFunction);
public PlotFunction pin(@NotNull PlotFunction plotFunction) {
return plotter.pin(plotFunction);
}
@NotNull
@Override
public void unpin(@NotNull PlotFunction plotFunction) {
plotter.unpin(plotFunction);
public PlotFunction unpin(@NotNull PlotFunction plotFunction) {
return plotter.unpin(plotFunction);
}
@NotNull
@Override
public void show(@NotNull PlotFunction plotFunction) {
plotter.show(plotFunction);
public PlotFunction show(@NotNull PlotFunction plotFunction) {
return plotter.show(plotFunction);
}
@NotNull
@Override
public void hide(@NotNull PlotFunction plotFunction) {
plotter.hide(plotFunction);
public PlotFunction hide(@NotNull PlotFunction plotFunction) {
return plotter.hide(plotFunction);
}
@Override
@@ -120,8 +124,13 @@ public class AndroidCalculatorPlotter implements CalculatorPlotter, SharedPrefer
}
@Override
public boolean isPlotPossible(@NotNull Generic expression) {
return plotter.isPlotPossible(expression);
public boolean is2dPlotPossible() {
return plotter.is2dPlotPossible();
}
@Override
public boolean isPlotPossibleFor(@NotNull Generic expression) {
return plotter.isPlotPossibleFor(expression);
}
@Override

View File

@@ -1,57 +0,0 @@
package org.solovyev.android.calculator.plot;
import android.content.Context;
import android.view.View;
import android.widget.TextView;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.solovyev.android.calculator.core.R;
import org.solovyev.android.list.ListItem;
import org.solovyev.android.view.TextViewBuilder;
import org.solovyev.android.view.UpdatableViewBuilder;
public class ParcelablePlotInputListItem implements ListItem {
@NotNull
private XyFunction plotInput;
@NotNull
private UpdatableViewBuilder<TextView> viewBuilder;
public ParcelablePlotInputListItem(@NotNull XyFunction plotInput) {
this.plotInput = plotInput;
// todo serso: use correct tag
this.viewBuilder = TextViewBuilder.newInstance(R.layout.plot_functions_fragment_list_item, null);
}
@Nullable
@Override
public OnClickAction getOnClickAction() {
return null;
}
@Nullable
@Override
public OnClickAction getOnLongClickAction() {
return null;
}
@NotNull
@Override
public View updateView(@NotNull Context context, @NotNull View view) {
// todo serso: optimize
return build(context);
}
@NotNull
@Override
public View build(@NotNull Context context) {
TextView textView = viewBuilder.build(context);
fill(textView);
return textView;
}
private void fill(@NotNull TextView textView) {
textView.setText(plotInput.getExpressionString());
}
}

View File

@@ -0,0 +1,119 @@
package org.solovyev.android.calculator.plot;
import android.content.Context;
import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.TextView;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.solovyev.android.calculator.Locator;
import org.solovyev.android.calculator.core.R;
import org.solovyev.android.list.ListItem;
import org.solovyev.android.view.ViewBuilder;
import org.solovyev.android.view.ViewFromLayoutBuilder;
public class PlotFunctionListItem implements ListItem {
private static final String PREFIX = "plot_function_";
@NotNull
private PlotFunction plotFunction;
@NotNull
private ViewBuilder<View> viewBuilder;
@NotNull
private String tag;
public PlotFunctionListItem(@NotNull PlotFunction plotFunction) {
this.plotFunction = plotFunction;
this.viewBuilder = ViewFromLayoutBuilder.newInstance(R.layout.cpp_plot_function_list_item);
this.tag = PREFIX + plotFunction.getXyFunction().getExpressionString();
}
@Nullable
@Override
public OnClickAction getOnClickAction() {
return null;
}
@Nullable
@Override
public OnClickAction getOnLongClickAction() {
return null;
}
@NotNull
@Override
public View updateView(@NotNull Context context, @NotNull View view) {
final Object viewTag = view.getTag();
if ( viewTag instanceof String ) {
if ( this.tag.equals(viewTag) ) {
return view;
} else if (((String) viewTag).startsWith(PREFIX)) {
fillView(view);
return view;
} else {
return build(context);
}
}
return build(context);
}
@NotNull
@Override
public View build(@NotNull Context context) {
final View root = buildView(context);
fillView(root);
return root;
}
private View buildView(@NotNull Context context) {
return viewBuilder.build(context);
}
private void fillView(@NotNull View root) {
root.setTag(tag);
final CalculatorPlotter plotter = Locator.getInstance().getPlotter();
final TextView expressionTextView = (TextView) root.findViewById(R.id.cpp_plot_function_expression_textview);
expressionTextView.setText(plotFunction.getXyFunction().getExpressionString());
final CheckBox pinnedCheckBox = (CheckBox) root.findViewById(R.id.cpp_plot_function_pinned_checkbox);
pinnedCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean pin) {
if (pin) {
if (!plotFunction.isPinned()) {
plotFunction = plotter.pin(plotFunction);
}
} else {
if (plotFunction.isPinned()) {
plotFunction = plotter.unpin(plotFunction);
}
}
}
});
pinnedCheckBox.setChecked(plotFunction.isPinned());
final CheckBox visibleCheckBox = (CheckBox) root.findViewById(R.id.cpp_plot_function_visible_checkbox);
visibleCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean show) {
if (show) {
if (!plotFunction.isVisible()) {
plotFunction = plotter.show(plotFunction);
}
} else {
if (plotFunction.isVisible()) {
plotFunction = plotter.hide(plotFunction);
}
}
}
});
visibleCheckBox.setChecked(plotFunction.isVisible());
}
}