Merge remote-tracking branch 'origin/dev-plot' into dev-plot

This commit is contained in:
Sergey Solovyev 2013-01-18 20:57:19 +04:00
commit 4f2c2701c0
14 changed files with 188 additions and 80 deletions

View File

@ -1,10 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:a="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:a="http://schemas.android.com/apk/res/android"
a:layout_width="wrap_content" style="?cpp_dialog_style">
a:layout_height="wrap_content"
style="?cpp_dialog_style"
a:orientation="vertical">
<LinearLayout <LinearLayout
a:id="@+id/cpp_fixable_messages_container" a:id="@+id/cpp_fixable_messages_container"

View File

@ -302,4 +302,14 @@
<string name="cpp_plot_screenshot_saved">Screenshot successfully saved: %1$s!</string> <string name="cpp_plot_screenshot_saved">Screenshot successfully saved: %1$s!</string>
<string name="cpp_plot_unable_to_save_screenshot">Screenshot cannot be saved as sdcard is not mounted. Mount sdcard and try again!</string> <string name="cpp_plot_unable_to_save_screenshot">Screenshot cannot be saved as sdcard is not mounted. Mount sdcard and try again!</string>
<string name="cpp_plot_function_line_color_type">Line color type</string>
<string name="cpp_plot_function_line_color">Line color</string>
<string name="cpp_plot_function_line_style">Line style</string>
<string name="cpp_plot_function_line_width">Line width</string>
<string name="cpp_plot_function_settings">Function settings</string>
<string name="cpp_function">Function</string>
<string name="cpp_pinned">Pinned</string>
<string name="cpp_visible">Visible</string>
</resources> </resources>

View File

@ -12,6 +12,11 @@
<style name="cpp_default_dialog_style"> <style name="cpp_default_dialog_style">
<item name="android:padding">6dp</item> <item name="android:padding">6dp</item>
<item name="android:minWidth">200dp</item>
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:orientation">vertical</item>
<item name="android:layout_gravity">center_horizontal</item>
</style> </style>
<style name="cpp_default_control_button_style" parent="cpp_keyboard_button_style"> <style name="cpp_default_control_button_style" parent="cpp_keyboard_button_style">

View File

@ -22,7 +22,7 @@
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="8"/> <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="8"/>
<application android:debuggable="false" android:hardwareAccelerated="false" android:icon="@drawable/icon" android:label="@string/c_app_name" android:name=".CalculatorApplication" android:theme="@style/cpp_metro_blue_theme"> <application android:debuggable="true" android:hardwareAccelerated="false" android:icon="@drawable/icon" android:label="@string/c_app_name" android:name=".CalculatorApplication" android:theme="@style/cpp_metro_blue_theme">
<activity android:clearTaskOnLaunch="true" android:label="@string/c_app_name" android:name=".CalculatorActivity" android:windowSoftInputMode="adjustPan"> <activity android:clearTaskOnLaunch="true" android:label="@string/c_app_name" android:name=".CalculatorActivity" android:windowSoftInputMode="adjustPan">
@ -40,7 +40,7 @@
<activity android:label="@string/c_history" android:name=".history.CalculatorHistoryActivity"/> <activity android:label="@string/c_history" android:name=".history.CalculatorHistoryActivity"/>
<activity android:excludeFromRecents="true" android:finishOnTaskLaunch="true" android:label="@string/calculation_messages_dialog_title" android:launchMode="singleTask" android:name=".FixableMessagesDialog" android:theme="@style/Theme.Sherlock.Dialog"/> <activity android:excludeFromRecents="true" android:finishOnTaskLaunch="true" android:label="@string/calculation_messages_dialog_title" android:launchMode="singleTask" android:name=".FixableMessagesDialog" android:theme="@style/cpp_gray_dialog_theme"/>
<activity android:label="@string/c_about" android:name=".about.CalculatorAboutActivity"/> <activity android:label="@string/c_about" android:name=".about.CalculatorAboutActivity"/>
@ -53,8 +53,8 @@
<activity android:label="@string/c_vars_and_constants" android:name=".math.edit.CalculatorVarsActivity"/> <activity android:label="@string/c_vars_and_constants" android:name=".math.edit.CalculatorVarsActivity"/>
<activity android:label="@string/c_plot_graph" android:name=".plot.CalculatorPlotActivity"/> <activity android:label="@string/c_plot_graph" android:name=".plot.CalculatorPlotActivity"/>
<activity android:label="@string/c_plot_graph" android:name=".plot.CalculatorPlotFunctionsActivity" android:theme="@style/cpp_gray_dialog_theme"/> <activity android:launchMode="singleTop" android:label="@string/cpp_plot_functions" android:name=".plot.CalculatorPlotFunctionsActivity" android:theme="@style/cpp_gray_dialog_theme"/>
<activity android:label="@string/c_plot_graph" android:name=".plot.CalculatorPlotFunctionSettingsActivity" android:theme="@style/cpp_gray_dialog_theme"/> <activity android:launchMode="singleTop" android:label="@string/cpp_plot_function_settings" android:name=".plot.CalculatorPlotFunctionSettingsActivity" android:theme="@style/cpp_gray_dialog_theme"/>
<!-- todo serso: strings--> <!-- todo serso: strings-->
<activity android:label="@string/c_plot_graph" android:name=".matrix.CalculatorMatrixActivity"/> <activity android:label="@string/c_plot_graph" android:name=".matrix.CalculatorMatrixActivity"/>

View File

@ -12,19 +12,19 @@ target=android-15
android.library.reference.1=../android-app-core android.library.reference.1=../android-app-core
android.library.reference.2=../android-app-widget android.library.reference.2=../android-app-widget
android.library.reference.3=../android-app-onscreen android.library.reference.3=../android-app-onscreen
android.library.reference.4=gen-external-apklibs/org.solovyev.android_android-common-all_1.0.6 android.library.reference.4=../android-app-core/gen-external-apklibs/org.solovyev.android_android-common-all_1.0.6
android.library.reference.5=gen-external-apklibs/org.solovyev.android_android-common-ads_1.0.6 android.library.reference.5=../android-app-core/gen-external-apklibs/org.solovyev.android_android-common-ads_1.0.6
android.library.reference.6=gen-external-apklibs/org.solovyev.android_android-common-core_1.0.6 android.library.reference.6=../android-app-core/gen-external-apklibs/org.solovyev.android_android-common-core_1.0.6
android.library.reference.7=gen-external-apklibs/org.solovyev.android_android-common-billing_1.0.6 android.library.reference.7=../android-app-core/gen-external-apklibs/org.solovyev.android_android-common-billing_1.0.6
android.library.reference.8=gen-external-apklibs/org.solovyev.android_android-common-db_1.0.6 android.library.reference.8=../android-app-core/gen-external-apklibs/org.solovyev.android_android-common-db_1.0.6
android.library.reference.9=gen-external-apklibs/org.solovyev.android_android-common-http_1.0.6 android.library.reference.9=../android-app-core/gen-external-apklibs/org.solovyev.android_android-common-http_1.0.6
android.library.reference.10=gen-external-apklibs/org.solovyev.android_android-common-list_1.0.6 android.library.reference.10=../android-app-core/gen-external-apklibs/org.solovyev.android_android-common-list_1.0.6
android.library.reference.11=gen-external-apklibs/org.solovyev.android_android-common-view_1.0.6 android.library.reference.11=../android-app-core/gen-external-apklibs/org.solovyev.android_android-common-view_1.0.6
android.library.reference.12=gen-external-apklibs/org.solovyev.android_android-common-preferences_1.0.6 android.library.reference.12=../android-app-core/gen-external-apklibs/org.solovyev.android_android-common-preferences_1.0.6
android.library.reference.13=gen-external-apklibs/org.solovyev.android_android-common-menu_1.0.6 android.library.reference.13=../android-app-core/gen-external-apklibs/org.solovyev.android_android-common-menu_1.0.6
android.library.reference.14=gen-external-apklibs/org.solovyev.android_android-common-other_1.0.6 android.library.reference.14=../android-app-core/gen-external-apklibs/org.solovyev.android_android-common-other_1.0.6
android.library.reference.15=gen-external-apklibs/org.solovyev.android_android-common-sherlock_1.0.6 android.library.reference.15=../android-app-core/gen-external-apklibs/org.solovyev.android_android-common-sherlock_1.0.6
android.library.reference.16=gen-external-apklibs/com.actionbarsherlock_actionbarsherlock_4.2.0 android.library.reference.16=../android-app-core/gen-external-apklibs/com.actionbarsherlock_actionbarsherlock_4.2.0
android.library.reference.17=gen-external-apklibs/org.solovyev.android_android-common-keyboard_1.0.6 android.library.reference.17=../android-app-core/gen-external-apklibs/org.solovyev.android_android-common-keyboard_1.0.6

View File

@ -1,10 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:a="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:a="http://schemas.android.com/apk/res/android"
a:layout_width="wrap_content"
a:layout_height="wrap_content"
a:id="@+id/dialog_layout" a:id="@+id/dialog_layout"
style="?cpp_dialog_style" style="?cpp_dialog_style">
a:orientation="vertical">
</LinearLayout> </LinearLayout>

View File

@ -3,13 +3,14 @@
<LinearLayout xmlns:a="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:a="http://schemas.android.com/apk/res/android"
a:id="@+id/main_fragment_layout" a:id="@+id/main_fragment_layout"
style="?cpp_fragment_layout_style" style="?cpp_fragment_layout_style"
a:layout_width="match_parent" a:layout_width="wrap_content"
a:layout_gravity="center_horizontal"
a:layout_height="match_parent" a:layout_height="match_parent"
a:orientation="vertical"> a:orientation="vertical">
<include layout="@layout/ad" /> <include layout="@layout/ad" />
<TextView a:text="Line color type" <TextView a:text="@string/cpp_plot_function_line_color_type"
a:layout_width="match_parent" a:layout_width="match_parent"
a:layout_height="wrap_content"/> a:layout_height="wrap_content"/>
@ -18,7 +19,7 @@
a:layout_width="match_parent" a:layout_width="match_parent"
a:layout_height="wrap_content"/> a:layout_height="wrap_content"/>
<TextView a:text="Line color" <TextView a:text="@string/cpp_plot_function_line_color"
a:layout_width="match_parent" a:layout_width="match_parent"
a:layout_height="wrap_content"/> a:layout_height="wrap_content"/>
@ -27,7 +28,7 @@
a:layout_width="match_parent" a:layout_width="match_parent"
a:layout_height="wrap_content"/> a:layout_height="wrap_content"/>
<TextView a:text="Line style" <TextView a:text="@string/cpp_plot_function_line_style"
a:layout_width="match_parent" a:layout_width="match_parent"
a:layout_height="wrap_content"/> a:layout_height="wrap_content"/>
@ -36,6 +37,14 @@
a:layout_width="match_parent" a:layout_width="match_parent"
a:layout_height="wrap_content"/> a:layout_height="wrap_content"/>
<TextView a:text="@string/cpp_plot_function_line_width"
a:layout_width="match_parent"
a:layout_height="wrap_content"/>
<SeekBar a:id="@+id/cpp_plot_functions_line_width_seekbar"
a:layout_width="match_parent"
a:layout_height="wrap_content"/>
<Button a:id="@+id/cpp_ok_button" <Button a:id="@+id/cpp_ok_button"
a:text="@string/ok" a:text="@string/ok"
a:layout_width="match_parent" a:layout_width="match_parent"

View File

@ -1,8 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:a="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:a="http://schemas.android.com/apk/res/android"
a:layout_width="wrap_content"
a:layout_height="wrap_content"
a:id="@+id/dialog_layout" a:id="@+id/dialog_layout"
style="?cpp_dialog_style" style="?cpp_dialog_style"
a:orientation="vertical"> a:orientation="vertical">

View File

@ -17,19 +17,19 @@
a:layout_width="0dp" a:layout_width="0dp"
a:layout_height="wrap_content" a:layout_height="wrap_content"
a:layout_weight="3" a:layout_weight="3"
a:text="Function"/> a:text="@string/cpp_function"/>
<TextView <TextView
a:layout_width="0dp" a:layout_width="0dp"
a:layout_height="wrap_content" a:layout_height="wrap_content"
a:layout_weight="1" a:layout_weight="1"
a:text="Pinned"/> a:text="@string/cpp_pinned"/>
<TextView <TextView
a:layout_width="0dp" a:layout_width="0dp"
a:layout_height="wrap_content" a:layout_height="wrap_content"
a:layout_weight="1" a:layout_weight="1"
a:text="Visible"/> a:text="@string/cpp_visible"/>
<TextView <TextView
a:layout_width="0dp" a:layout_width="0dp"

View File

@ -33,10 +33,8 @@ public enum CalculatorFragmentType {
functions(CalculatorFunctionsFragment.class, R.layout.math_entities_fragment, R.string.c_functions), functions(CalculatorFunctionsFragment.class, R.layout.math_entities_fragment, R.string.c_functions),
operators(CalculatorOperatorsFragment.class, R.layout.math_entities_fragment, R.string.c_operators), operators(CalculatorOperatorsFragment.class, R.layout.math_entities_fragment, R.string.c_operators),
plotter(CalculatorPlotFragment.class, R.layout.cpp_plot_fragment, R.string.c_graph), plotter(CalculatorPlotFragment.class, R.layout.cpp_plot_fragment, R.string.c_graph),
plotter_functions(CalculatorPlotFunctionsActivity.CalculatorPlotFunctionsFragment.class, R.layout.cpp_plot_functions_fragment, R.string.cpp_plot_functions),
// todo serso: strings plotter_function_settings(CalculatorPlotFunctionSettingsActivity.CalculatorPlotFunctionSettingsFragment.class, R.layout.cpp_plot_function_settings_fragment, R.string.cpp_plot_function_settings),
plotter_functions(CalculatorPlotFunctionsActivity.CalculatorPlotFunctionsFragment.class, R.layout.cpp_plot_functions_fragment, R.string.c_graph),
plotter_function_settings(CalculatorPlotFunctionSettingsActivity.CalculatorPlotFunctionSettingsFragment.class, R.layout.cpp_plot_function_settings_fragment, R.string.c_graph),
about(CalculatorAboutFragment.class, R.layout.about_fragment, R.string.c_about), about(CalculatorAboutFragment.class, R.layout.about_fragment, R.string.c_about),
faq(CalculatorHelpFaqFragment.class, R.layout.help_faq_fragment, R.string.c_faq), faq(CalculatorHelpFaqFragment.class, R.layout.help_faq_fragment, R.string.c_faq),

View File

@ -445,11 +445,7 @@ public abstract class AbstractCalculatorPlotFragment extends CalculatorFragment
paint.setColor(plotLineDef.getLineColor()); paint.setColor(plotLineDef.getLineColor());
paint.setStyle(Paint.Style.STROKE); paint.setStyle(Paint.Style.STROKE);
if ( plotLineDef.getLineWidth() == PlotLineDef.DEFAULT_LINE_WIDTH ) { paint.setStrokeWidth(plotLineDef.getLineWidth());
paint.setStrokeWidth(0);
} else {
paint.setStrokeWidth(plotLineDef.getLineWidth());
}
final AndroidPlotLineStyle androidPlotLineStyle = AndroidPlotLineStyle.valueOf(plotLineDef.getLineStyle()); final AndroidPlotLineStyle androidPlotLineStyle = AndroidPlotLineStyle.valueOf(plotLineDef.getLineStyle());
if (androidPlotLineStyle != null) { if (androidPlotLineStyle != null) {

View File

@ -9,6 +9,7 @@ import android.view.View;
import android.widget.Scroller; import android.widget.Scroller;
import android.widget.ZoomButtonsController; import android.widget.ZoomButtonsController;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.solovyev.common.math.Point2d;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.util.ArrayList; import java.util.ArrayList;
@ -24,6 +25,7 @@ public class CalculatorGraph2dView extends View implements GraphView {
* *
********************************************************************** **********************************************************************
*/ */
private static final int NO_TOUCH = -1;
private static final float TICKS_COUNT = 15; private static final float TICKS_COUNT = 15;
public static final int TICK_SIZE_PXS = 3; public static final int TICK_SIZE_PXS = 3;
@ -48,7 +50,7 @@ public class CalculatorGraph2dView extends View implements GraphView {
private int widthPxs; private int widthPxs;
private int heightPxs; private int heightPxs;
@NotNull @NotNull
private final Matrix matrix = new Matrix(); private final Matrix matrix = new Matrix();
// paints // paints
@ -77,15 +79,15 @@ public class CalculatorGraph2dView extends View implements GraphView {
private float y0; private float y0;
// graph width in function units (NOT screen pixels) // graph width in function units (NOT screen pixels)
private float graphWidth = 20; private float gWidth = 20;
private float lastXMin; private float lastXMin;
private float lastYMin; private float lastYMin;
private float lastYMax; private float lastYMax;
private float lastTouchX, lastTouchY; private float lastTouchXPxs = NO_TOUCH;
private float lastTouchYPxs = NO_TOUCH;
@NotNull @NotNull
private TouchHandler touchHandler; private TouchHandler touchHandler;
@ -131,8 +133,8 @@ public class CalculatorGraph2dView extends View implements GraphView {
@Override @Override
public void setXRange(float xMin, float xMax) { public void setXRange(float xMin, float xMax) {
this.graphWidth = xMax - xMin; this.gWidth = xMax - xMin;
this.x0 = xMin + graphWidth / 2; this.x0 = xMin + gWidth / 2;
this.y0 = 0; this.y0 = 0;
} }
@ -411,6 +413,9 @@ public class CalculatorGraph2dView extends View implements GraphView {
} }
final float tickStep = getStep(gWidth);
final int tickDigits = countTickDigits(tickStep);
{ {
// GRID // GRID
@ -421,17 +426,14 @@ public class CalculatorGraph2dView extends View implements GraphView {
textPaint.setTextSize(12); textPaint.setTextSize(12);
textPaint.setTextAlign(Paint.Align.CENTER); textPaint.setTextAlign(Paint.Align.CENTER);
final float step = getStep(graphWidth);
final int tickDigits = countTickDigits(step);
// round xMin and init first tick // round xMin and init first tick
float tick = ((int) (xMin / step)) * step; float tick = ((int) (xMin / tickStep)) * tickStep;
final float y2 = y0px + TICK_SIZE_PXS; final float y2 = y0px + TICK_SIZE_PXS;
final float stepPxs = step / ratio; final float stepPxs = tickStep / ratio;
for (float xPxs = (tick - xMin) / ratio; xPxs <= widthPxs; xPxs += stepPxs, tick += step) { for (float xPxs = (tick - xMin) / ratio; xPxs <= widthPxs; xPxs += stepPxs, tick += tickStep) {
// draw grid line // draw grid line
canvas.drawLine(xPxs, 0, xPxs, heightPxs, paint); canvas.drawLine(xPxs, 0, xPxs, heightPxs, paint);
@ -442,9 +444,9 @@ public class CalculatorGraph2dView extends View implements GraphView {
} }
final float x1 = x0px - TICK_SIZE_PXS; final float x1 = x0px - TICK_SIZE_PXS;
tick = ((int) (yMin / step)) * step; tick = ((int) (yMin / tickStep)) * tickStep;
textPaint.setTextAlign(Paint.Align.RIGHT); textPaint.setTextAlign(Paint.Align.RIGHT);
for (float y = heightPxs - (tick - yMin) / ratio; y >= 0; y -= stepPxs, tick += step) { for (float y = heightPxs - (tick - yMin) / ratio; y >= 0; y -= stepPxs, tick += tickStep) {
canvas.drawLine(0, y, widthPxs, y, paint); canvas.drawLine(0, y, widthPxs, y, paint);
final CharSequence tickLabel = formatTick(tick, tickDigits); final CharSequence tickLabel = formatTick(tick, tickDigits);
@ -464,6 +466,26 @@ public class CalculatorGraph2dView extends View implements GraphView {
canvas.drawLine(0, y0px, widthPxs, y0px, paint); canvas.drawLine(0, y0px, widthPxs, y0px, paint);
} }
{
// TOUCH POSITION
if (lastTouchXPxs != NO_TOUCH && lastTouchYPxs != NO_TOUCH) {
paint.setColor(graphViewHelper.getFunctionViewDef().getGridColor());
paint.setAlpha(100);
canvas.drawLine(lastTouchXPxs, 0, lastTouchXPxs, heightPxs, paint);
canvas.drawLine(0, lastTouchYPxs, widthPxs, lastTouchYPxs, paint);
final Point2d lastTouch = toGraphCoordinates(lastTouchXPxs, lastTouchYPxs);
final String touchLabel = "[" + formatTick(lastTouch.getX(), tickDigits + 1) + ", " + formatTick(lastTouch.getY(), tickDigits + 1) + "]";
canvas.drawText(touchLabel, 0, touchLabel.length(), lastTouchXPxs - 40, lastTouchYPxs - 40, textPaint);
// restore alpha
paint.setAlpha(255);
}
}
matrix.reset(); matrix.reset();
matrix.preTranslate(-this.x0, -this.y0); matrix.preTranslate(-this.x0, -this.y0);
@ -543,14 +565,18 @@ public class CalculatorGraph2dView extends View implements GraphView {
********************************************************************** **********************************************************************
*/ */
private Point2d toGraphCoordinates(float xPxs, float yPxs) {
return new Point2d(xPxs * getRatio() + getXMin(), - (yPxs * getRatio() + getYMin()));
}
// X // X
public float getXMin() { public float getXMin() {
return x0 - graphWidth / 2; return x0 - gWidth / 2;
} }
private float getXMax(float minX) { private float getXMax(float minX) {
return minX + graphWidth; return minX + gWidth;
} }
public float getXMax() { public float getXMax() {
@ -580,20 +606,20 @@ public class CalculatorGraph2dView extends View implements GraphView {
} }
private float getGraphHeight() { private float getGraphHeight() {
return graphWidth * getAspectRatio(); return gWidth * getAspectRatio();
} }
private float getRatio() { private float getRatio() {
if (widthPxs != 0) { if (widthPxs != 0) {
return graphWidth / widthPxs; return gWidth / widthPxs;
} else { } else {
return 0; return 0;
} }
} }
private int getAspectRatio() { private float getAspectRatio() {
if (widthPxs != 0) { if (widthPxs != 0) {
return heightPxs / widthPxs; return ((float)heightPxs) / widthPxs;
} else { } else {
return 0; return 0;
} }
@ -621,12 +647,12 @@ public class CalculatorGraph2dView extends View implements GraphView {
public void onZoom(boolean zoomIn) { public void onZoom(boolean zoomIn) {
if (zoomIn) { if (zoomIn) {
if (canZoomIn()) { if (canZoomIn()) {
graphWidth /= 2; gWidth /= 2;
invalidateGraphs(); invalidateGraphs();
} }
} else { } else {
if (canZoomOut()) { if (canZoomOut()) {
graphWidth *= 2; gWidth *= 2;
invalidateGraphs(); invalidateGraphs();
} }
} }
@ -656,17 +682,19 @@ public class CalculatorGraph2dView extends View implements GraphView {
if (!scroller.isFinished()) { if (!scroller.isFinished()) {
scroller.abortAnimation(); scroller.abortAnimation();
} }
lastTouchX = x;
lastTouchY = y; lastTouchXPxs = x;
lastTouchYPxs = y;
} }
public void onTouchMove(float x, float y) { public void onTouchMove(float x, float y) {
float deltaX = x - lastTouchX; float deltaX = x - lastTouchXPxs;
float deltaY = y - lastTouchY; float deltaY = y - lastTouchYPxs;
if (deltaX < -1 || deltaX > 1 || deltaY < -1 || deltaY > 1) { if (deltaX < -1 || deltaX > 1 || deltaY < -1 || deltaY > 1) {
scroll(-deltaX, deltaY); scroll(-deltaX, deltaY);
lastTouchX = x; lastTouchXPxs = x;
lastTouchY = y; lastTouchYPxs = y;
invalidate(); invalidate();
} }
} }
@ -674,6 +702,9 @@ public class CalculatorGraph2dView extends View implements GraphView {
public void onTouchUp(float x, float y) { public void onTouchUp(float x, float y) {
final float ratio = getRatio(); final float ratio = getRatio();
lastTouchXPxs = NO_TOUCH;
lastTouchYPxs = NO_TOUCH;
float sx = -touchHandler.getXVelocity(); float sx = -touchHandler.getXVelocity();
float sy = touchHandler.getYVelocity(); float sy = touchHandler.getYVelocity();
@ -689,7 +720,7 @@ public class CalculatorGraph2dView extends View implements GraphView {
} }
public void onTouchZoomDown(float x1, float y1, float x2, float y2) { public void onTouchZoomDown(float x1, float y1, float x2, float y2) {
zoomTracker.start(graphWidth, x1, y1, x2, y2); zoomTracker.start(gWidth, x1, y1, x2, y2);
} }
public void onTouchZoomMove(float x1, float y1, float x2, float y2) { public void onTouchZoomMove(float x1, float y1, float x2, float y2) {
@ -698,7 +729,7 @@ public class CalculatorGraph2dView extends View implements GraphView {
} }
float targetGwidth = zoomTracker.value; float targetGwidth = zoomTracker.value;
if (targetGwidth > .25f && targetGwidth < 200) { if (targetGwidth > .25f && targetGwidth < 200) {
graphWidth = targetGwidth; gWidth = targetGwidth;
} }
// scroll(-zoomTracker.moveX, zoomTracker.moveY); // scroll(-zoomTracker.moveX, zoomTracker.moveY);
invalidateGraphs(); invalidateGraphs();
@ -712,7 +743,7 @@ public class CalculatorGraph2dView extends View implements GraphView {
} }
private void scroll(float deltaX, float deltaY) { private void scroll(float deltaX, float deltaY) {
final float scale = graphWidth / widthPxs; final float scale = gWidth / widthPxs;
float dx = deltaX * scale; float dx = deltaX * scale;
float dy = deltaY * scale; float dy = deltaY * scale;
final float adx = Math.abs(dx); final float adx = Math.abs(dx);

View File

@ -4,11 +4,14 @@ import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.AdapterView; import android.widget.AdapterView;
import android.widget.Button; import android.widget.Button;
import android.widget.SeekBar;
import android.widget.Spinner; import android.widget.Spinner;
import com.actionbarsherlock.app.SherlockFragmentActivity; import com.actionbarsherlock.app.SherlockFragmentActivity;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@ -27,7 +30,6 @@ public class CalculatorPlotFunctionSettingsActivity extends SherlockFragmentActi
final Intent intent = new Intent(context, CalculatorPlotFunctionSettingsActivity.class); final Intent intent = new Intent(context, CalculatorPlotFunctionSettingsActivity.class);
intent.putExtra(INPUT_FUNCTION_ID, plotFunction.getXyFunction().getId()); intent.putExtra(INPUT_FUNCTION_ID, plotFunction.getXyFunction().getId());
context.startActivity(intent); context.startActivity(intent);
} }
@Override @Override
@ -55,9 +57,42 @@ public class CalculatorPlotFunctionSettingsActivity extends SherlockFragmentActi
public static class CalculatorPlotFunctionSettingsFragment extends CalculatorFragment { public static class CalculatorPlotFunctionSettingsFragment extends CalculatorFragment {
/*
**********************************************************************
*
* STATIC
*
**********************************************************************
*/
public static final int LINE_WIDTH_DELAY = 1000;
public static final int MESSAGE_ID = 1;
@Nullable @Nullable
private PlotFunction plotFunction; private PlotFunction plotFunction;
@NotNull
private final CalculatorPlotter plotter = Locator.getInstance().getPlotter();
@NotNull
private final Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (plotFunction != null) {
switch (msg.what) {
case MESSAGE_ID:
final PlotLineDef newPlotLineDef = PlotLineDef.changeLineWidth(plotFunction.getPlotLineDef(), msg.arg1);
final PlotFunction newPlotFunction = PlotFunction.changePlotLineDef(plotFunction, newPlotLineDef);
if(plotter.updateFunction(newPlotFunction)) {
plotFunction = newPlotFunction;
}
break;
}
}
}
};
public CalculatorPlotFunctionSettingsFragment() { public CalculatorPlotFunctionSettingsFragment() {
super(CalculatorFragmentType.plotter_function_settings); super(CalculatorFragmentType.plotter_function_settings);
} }
@ -69,6 +104,9 @@ public class CalculatorPlotFunctionSettingsActivity extends SherlockFragmentActi
final String functionId = getArguments().getString(INPUT_FUNCTION_ID); final String functionId = getArguments().getString(INPUT_FUNCTION_ID);
if (functionId != null) { if (functionId != null) {
plotFunction = Locator.getInstance().getPlotter().getFunctionById(functionId); plotFunction = Locator.getInstance().getPlotter().getFunctionById(functionId);
if ( plotFunction != null ) {
getActivity().setTitle(plotFunction.getXyFunction().getExpressionString());
}
} }
} }
@ -81,14 +119,16 @@ public class CalculatorPlotFunctionSettingsActivity extends SherlockFragmentActi
public void onViewCreated(View root, Bundle savedInstanceState) { public void onViewCreated(View root, Bundle savedInstanceState) {
super.onViewCreated(root, savedInstanceState); super.onViewCreated(root, savedInstanceState);
final CalculatorPlotter plotter = Locator.getInstance().getPlotter();
final Spinner plotLineColorSpinner = (Spinner)root.findViewById(R.id.cpp_plot_function_line_color_spinner); final Spinner plotLineColorSpinner = (Spinner)root.findViewById(R.id.cpp_plot_function_line_color_spinner);
final Spinner plotLineColorTypeSpinner = (Spinner)root.findViewById(R.id.cpp_plot_function_line_color_type_spinner); final Spinner plotLineColorTypeSpinner = (Spinner)root.findViewById(R.id.cpp_plot_function_line_color_type_spinner);
final Spinner plotLineStyleSpinner = (Spinner)root.findViewById(R.id.cpp_plot_function_line_style_spinner); final Spinner plotLineStyleSpinner = (Spinner)root.findViewById(R.id.cpp_plot_function_line_style_spinner);
final SeekBar plotLineWidthSeekBar = (SeekBar)root.findViewById(R.id.cpp_plot_functions_line_width_seekbar);
final Button okButton = (Button)root.findViewById(R.id.cpp_ok_button); final Button okButton = (Button)root.findViewById(R.id.cpp_ok_button);
plotLineWidthSeekBar.setMax(10);
if (plotFunction != null) { if (plotFunction != null) {
plotLineWidthSeekBar.setProgress((int)plotFunction.getPlotLineDef().getLineWidth());
plotLineColorSpinner.setSelection(PlotLineColor.valueOf(plotFunction.getPlotLineDef().getLineColor()).ordinal()); plotLineColorSpinner.setSelection(PlotLineColor.valueOf(plotFunction.getPlotLineDef().getLineColor()).ordinal());
plotLineColorSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { plotLineColorSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@ -150,6 +190,25 @@ public class CalculatorPlotFunctionSettingsActivity extends SherlockFragmentActi
} }
}); });
plotLineWidthSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
// remove old messages
handler.removeMessages(MESSAGE_ID);
// send new message
handler.sendMessageDelayed(Message.obtain(handler, MESSAGE_ID, progress, 0), LINE_WIDTH_DELAY);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
okButton.setOnClickListener(new View.OnClickListener() { okButton.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
@ -161,6 +220,7 @@ public class CalculatorPlotFunctionSettingsActivity extends SherlockFragmentActi
}); });
} else { } else {
plotLineWidthSeekBar.setEnabled(false);
plotLineColorSpinner.setEnabled(false); plotLineColorSpinner.setEnabled(false);
plotLineColorTypeSpinner.setEnabled(false); plotLineColorTypeSpinner.setEnabled(false);
plotLineStyleSpinner.setEnabled(false); plotLineStyleSpinner.setEnabled(false);

View File

@ -18,7 +18,7 @@ public class PlotLineDef {
*/ */
@NotNull @NotNull
public static final Float DEFAULT_LINE_WIDTH = -1f; private static final Float DEFAULT_LINE_WIDTH = 0f;
private static final int WHITE = 0xFFFFFFFF; private static final int WHITE = 0xFFFFFFFF;
@ -39,7 +39,7 @@ public class PlotLineDef {
@NotNull @NotNull
private PlotLineStyle lineStyle = PlotLineStyle.solid; private PlotLineStyle lineStyle = PlotLineStyle.solid;
private float lineWidth = -DEFAULT_LINE_WIDTH; private float lineWidth = DEFAULT_LINE_WIDTH;
private PlotLineDef() { private PlotLineDef() {
} }
@ -88,6 +88,13 @@ public class PlotLineDef {
return result; return result;
} }
@NotNull
public static PlotLineDef changeLineWidth(@NotNull PlotLineDef plotLineDef, int newLineWidth) {
final PlotLineDef result = plotLineDef.copy();
result.lineWidth = newLineWidth;
return result;
}
@NotNull @NotNull
public static PlotLineDef changeLineColorType(@NotNull PlotLineDef plotLineDef, @NotNull PlotLineColorType newPlotLineColorType) { public static PlotLineDef changeLineColorType(@NotNull PlotLineDef plotLineDef, @NotNull PlotLineColorType newPlotLineColorType) {
final PlotLineDef result = plotLineDef.copy(); final PlotLineDef result = plotLineDef.copy();