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

@@ -14,10 +14,12 @@ import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.solovyev.android.calculator.*;
import org.solovyev.android.menu.AMenuItem;
import org.solovyev.android.menu.ActivityMenu;
import org.solovyev.android.menu.IdentifiableMenuItem;
import org.solovyev.android.menu.ListActivityMenu;
import org.solovyev.android.sherlock.menu.SherlockMenuHelper;
import org.solovyev.common.JPredicate;
import java.io.Serializable;
import java.util.ArrayList;
@@ -97,13 +99,6 @@ public abstract class AbstractCalculatorPlotFragment extends CalculatorFragment
setHasOptionsMenu(true);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
this.plotData = Locator.getInstance().getPlotter().getPlotData();
}
@Override
public void onSaveInstanceState(Bundle out) {
super.onSaveInstanceState(out);
@@ -121,8 +116,10 @@ public abstract class AbstractCalculatorPlotFragment extends CalculatorFragment
public void onResume() {
super.onResume();
plotData = Locator.getInstance().getPlotter().getPlotData();
createChart(plotData);
createGraphicalView(getView(), plotData);
getActivity().invalidateOptionsMenu();
}
@Override
@@ -141,6 +138,8 @@ public abstract class AbstractCalculatorPlotFragment extends CalculatorFragment
getUiHandler().post(new Runnable() {
@Override
public void run() {
getActivity().invalidateOptionsMenu();
createChart(plotData);
final View view = getView();
@@ -197,26 +196,55 @@ public abstract class AbstractCalculatorPlotFragment extends CalculatorFragment
*/
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
public void onCreateOptionsMenu(final Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
final List<IdentifiableMenuItem<MenuItem>> menuItems = new ArrayList<IdentifiableMenuItem<MenuItem>>();
menuItems.add(PlotMenu.preferences);
if ( is3dPlotSupported() ) {
menuItems.add(new IdentifiableMenuItem<MenuItem>() {
@NotNull
@Override
public Integer getItemId() {
return R.id.menu_plot_3d;
}
menuItems.add(PlotMenu.functions);
@Override
public void onClick(@NotNull MenuItem data, @NotNull Context context) {
Locator.getInstance().getPlotter().setPlot3d(true);
final IdentifiableMenuItem<MenuItem> plot3dMenuItem = new IdentifiableMenuItem<MenuItem>() {
@NotNull
@Override
public Integer getItemId() {
return R.id.menu_plot_3d;
}
@Override
public void onClick(@NotNull MenuItem data, @NotNull Context context) {
Locator.getInstance().getPlotter().setPlot3d(true);
}
};
menuItems.add(plot3dMenuItem);
final IdentifiableMenuItem<MenuItem> plot2dMenuItem = new IdentifiableMenuItem<MenuItem>() {
@NotNull
@Override
public Integer getItemId() {
return R.id.menu_plot_2d;
}
@Override
public void onClick(@NotNull MenuItem data, @NotNull Context context) {
Locator.getInstance().getPlotter().setPlot3d(false);
}
};
menuItems.add(plot2dMenuItem);
final boolean plot3dVisible = !plotData.isPlot3d() && is3dPlotSupported();
final boolean plot2dVisible = plotData.isPlot3d() && Locator.getInstance().getPlotter().is2dPlotPossible();
fragmentMenu = ListActivityMenu.fromResource(R.menu.plot_menu, menuItems, SherlockMenuHelper.getInstance(), new JPredicate<AMenuItem<MenuItem>>() {
@Override
public boolean apply(@Nullable AMenuItem<MenuItem> menuItem) {
if ( menuItem == plot3dMenuItem ) {
return !plot3dVisible;
} else if ( menuItem == plot2dMenuItem ) {
return !plot2dVisible;
}
});
}
fragmentMenu = ListActivityMenu.fromResource(R.menu.plot_menu, menuItems, SherlockMenuHelper.getInstance());
return false;
}
});
final FragmentActivity activity = this.getActivity();
if (activity != null) {
@@ -251,6 +279,13 @@ public abstract class AbstractCalculatorPlotFragment extends CalculatorFragment
private static enum PlotMenu implements IdentifiableMenuItem<MenuItem> {
functions(R.id.menu_plot_functions) {
@Override
public void onClick(@NotNull MenuItem data, @NotNull Context context) {
context.startActivity(new Intent(context, CalculatorPlotFunctionsActivity.class));
}
},
preferences(R.id.menu_plot_settings) {
@Override
public void onClick(@NotNull MenuItem data, @NotNull Context context) {

View File

@@ -0,0 +1,24 @@
package org.solovyev.android.calculator.plot;
import android.os.Bundle;
import com.actionbarsherlock.app.SherlockFragmentActivity;
import org.jetbrains.annotations.Nullable;
import org.solovyev.android.calculator.R;
import org.solovyev.android.fragments.FragmentUtils;
/**
* User: serso
* Date: 1/13/13
* Time: 5:05 PM
*/
public class CalculatorPlotFunctionsActivity extends SherlockFragmentActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.cpp_plot_functions_dialog);
FragmentUtils.createFragment(this, CalculatorPlotFunctionsFragment.class, R.id.dialog_layout, "plot-functions");
}
}

View File

@@ -1,37 +0,0 @@
package org.solovyev.android.calculator.plot;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
final class CalculatorPlotFunctionsController {
@NotNull
private static final CalculatorPlotFunctionsController instance = new CalculatorPlotFunctionsController();
@NotNull
private final List<XyFunction> functions = new ArrayList<XyFunction>();
private CalculatorPlotFunctionsController() {
}
@NotNull
public static CalculatorPlotFunctionsController getInstance() {
return instance;
}
@NotNull
public List<XyFunction> getFunctions() {
return Collections.unmodifiableList(functions);
}
public boolean addFunction(@NotNull XyFunction function) {
if (!functions.contains(function)) {
return functions.add(function);
} else {
return false;
}
}
}

View File

@@ -4,6 +4,7 @@ import com.google.common.base.Function;
import com.google.common.collect.Lists;
import org.jetbrains.annotations.NotNull;
import org.solovyev.android.calculator.CalculatorListFragment;
import org.solovyev.android.calculator.Locator;
import org.solovyev.android.calculator.about.CalculatorFragmentType;
import org.solovyev.android.list.ListItemArrayAdapter;
@@ -23,10 +24,11 @@ public class CalculatorPlotFunctionsFragment extends CalculatorListFragment {
public void onResume() {
super.onResume();
final List<ParcelablePlotInputListItem> items = Lists.transform(CalculatorPlotFunctionsController.getInstance().getFunctions(), new Function<XyFunction, ParcelablePlotInputListItem>() {
final List<PlotFunctionListItem> items = Lists.transform(Locator.getInstance().getPlotter().getFunctions(), new Function<PlotFunction, PlotFunctionListItem>() {
@Override
public ParcelablePlotInputListItem apply(@Nullable XyFunction input) {
return new ParcelablePlotInputListItem(input);
public PlotFunctionListItem apply(@Nullable PlotFunction input) {
assert input != null;
return new PlotFunctionListItem(input);
}
});