| @@ -9,7 +9,15 @@ | |||
| <ListView | |||
| android:id="@+id/mainConfigListView" | |||
| android:layout_width="match_parent" | |||
| android:layout_height="wrap_content" > | |||
| android:layout_height="wrap_content" | |||
| android:divider="@drawable/gradient_view" | |||
| android:dividerHeight="1dp" > | |||
| </ListView> | |||
| <ImageView | |||
| android:id="@+id/imageView1" | |||
| android:layout_width="match_parent" | |||
| android:layout_height="1dp" | |||
| android:src="@drawable/gradient_view" /> | |||
| </LinearLayout> | |||
| @@ -58,7 +58,7 @@ | |||
| app:font="@string/TitilliumWeb_Regular" /> | |||
| <ch.spherIC.recurvebowsight.components.RiserSpinner | |||
| android:id="@+id/scRiserSpinner" | |||
| android:id="@+id/rcRiserSpinner" | |||
| style="@style/GlassSpinner" | |||
| android:layout_width="wrap_content" | |||
| android:layout_height="40dp" | |||
| @@ -78,7 +78,7 @@ | |||
| android:paddingLeft="8dp" > | |||
| <ch.spherIC.recurvebowsight.components.FontTextView | |||
| android:id="@+id/rcManufacturer" | |||
| android:id="@+id/rcManufacturerLbl" | |||
| android:layout_width="wrap_content" | |||
| android:layout_height="wrap_content" | |||
| android:layout_gravity="right|center_vertical" | |||
| @@ -88,7 +88,7 @@ | |||
| app:font="@string/TitilliumWeb_Regular" /> | |||
| <ch.spherIC.recurvebowsight.components.FontEditText | |||
| android:id="@+id/scaVTxtFld" | |||
| android:id="@+id/rcManufacturerTxtFld" | |||
| android:layout_width="wrap_content" | |||
| android:layout_height="40dp" | |||
| android:layout_marginLeft="4dp" | |||
| @@ -111,7 +111,7 @@ | |||
| android:paddingLeft="8dp" > | |||
| <ch.spherIC.recurvebowsight.components.FontTextView | |||
| android:id="@+id/rcRiserModel" | |||
| android:id="@+id/rcModelLbl" | |||
| android:layout_width="wrap_content" | |||
| android:layout_height="wrap_content" | |||
| android:layout_gravity="right|center_vertical" | |||
| @@ -121,7 +121,7 @@ | |||
| app:font="@string/TitilliumWeb_Regular" /> | |||
| <ch.spherIC.recurvebowsight.components.FontEditText | |||
| android:id="@+id/scVertScaleRngTxtFld" | |||
| android:id="@+id/rcModelTxtFld" | |||
| android:layout_width="wrap_content" | |||
| android:layout_height="40dp" | |||
| android:layout_marginLeft="4dp" | |||
| @@ -143,7 +143,7 @@ | |||
| android:paddingLeft="8dp" > | |||
| <ch.spherIC.recurvebowsight.components.FontTextView | |||
| android:id="@+id/rcSize" | |||
| android:id="@+id/rcSizeLbl" | |||
| android:layout_width="wrap_content" | |||
| android:layout_height="wrap_content" | |||
| android:layout_gravity="right|center_vertical" | |||
| @@ -153,7 +153,7 @@ | |||
| app:font="@string/TitilliumWeb_Regular" /> | |||
| <ch.spherIC.recurvebowsight.components.FontEditText | |||
| android:id="@+id/scVertSkalaMiddleTxtFld" | |||
| android:id="@+id/rcSizeTxtFld" | |||
| android:layout_width="wrap_content" | |||
| android:layout_height="40dp" | |||
| android:layout_marginLeft="4dp" | |||
| @@ -186,7 +186,7 @@ | |||
| app:font="@string/TitilliumWeb_Regular" /> | |||
| <ch.spherIC.recurvebowsight.components.FontEditText | |||
| android:id="@+id/scVvisHTxtFld" | |||
| android:id="@+id/rcVvisHTxtFld" | |||
| android:layout_width="wrap_content" | |||
| android:layout_height="40dp" | |||
| android:layout_marginLeft="4dp" | |||
| @@ -219,7 +219,7 @@ | |||
| app:font="@string/TitilliumWeb_Regular" /> | |||
| <ch.spherIC.recurvebowsight.components.FontEditText | |||
| android:id="@+id/scVvisVTxtFld" | |||
| android:id="@+id/rcVvisVTxtFld" | |||
| android:layout_width="wrap_content" | |||
| android:layout_height="40dp" | |||
| android:layout_marginLeft="4dp" | |||
| @@ -53,10 +53,12 @@ | |||
| <string name="caption_Cancel">Abbrechen</string> | |||
| <string name="caption_NoSelection">Keine Auswahl…</string> | |||
| <string name="caption_FillAllMandatoryFields">Um die Berechnung durchzuführen, müssen alle Parameterfelder abgefüllt sein.</string> | |||
| <string name="caption_Cfg_FillAllMandatoryFields">Bitte alle Parameterfelder abfüllen.</string> | |||
| <string name="caption_Calculating">Berechnung läuft…</string> | |||
| <string name="caption_New">Neu</string> | |||
| <string name="caption_Save">Speichern</string> | |||
| <string name="caption_Delete">Löschen</string> | |||
| <string name="caption_Cfg_DeleteNotPossible">Löschen nicht möglich. Die Entität wird vermutlich von einer anderen Entität referenziert.</string> | |||
| <!-- --> | |||
| <string name="fcChart_StartAngle">Abschusswinkel:\n</string> | |||
| <string name="fcChart_MaxHeight">Max. Höhe der Flugbahn:\n</string> | |||
| @@ -53,10 +53,12 @@ | |||
| <string name="caption_Cancel">Cancel</string> | |||
| <string name="caption_NoSelection">No selection…</string> | |||
| <string name="caption_FillAllMandatoryFields">To start the calculation all parameter fields must be filled.</string> | |||
| <string name="caption_Cfg_FillAllMandatoryFields">Please fill in all parameter fields.</string> | |||
| <string name="caption_Calculating">Calculating…</string> | |||
| <string name="caption_New">New</string> | |||
| <string name="caption_Save">Save</string> | |||
| <string name="caption_Delete">Delete</string> | |||
| <string name="caption_Cfg_DeleteNotPossible">Unable to delete. Most probably the item is referenced by an other entity.</string> | |||
| <!-- --> | |||
| <string name="fcChart_StartAngle">Elevation Angle:\n</string> | |||
| <string name="fcChart_MaxHeight">Max. Height of Trajectory:\n</string> | |||
| @@ -7,19 +7,56 @@ import android.app.Activity; | |||
| import android.content.pm.ActivityInfo; | |||
| import android.database.sqlite.SQLiteConstraintException; | |||
| import android.os.Bundle; | |||
| import android.view.Gravity; | |||
| import android.view.Menu; | |||
| import android.view.View; | |||
| import android.view.View.OnClickListener; | |||
| import android.widget.AdapterView; | |||
| import android.widget.AdapterView.OnItemSelectedListener; | |||
| import android.widget.Button; | |||
| import android.widget.TextView; | |||
| import android.widget.Toast; | |||
| import ch.spherIC.recurvebowsight.R; | |||
| import ch.spherIC.recurvebowsight.components.FontArrayAdapter; | |||
| import ch.spherIC.recurvebowsight.components.RiserSpinner; | |||
| import ch.spherIC.recurvebowsight.database.dao.RiserDao; | |||
| import ch.spherIC.recurvebowsight.model.IRiser; | |||
| import ch.spherIC.recurvebowsight.utilities.CompatibilityUtil; | |||
| import java.text.DecimalFormat; | |||
| import java.util.List; | |||
| /** | |||
| * @author FC Smilari | |||
| */ | |||
| public class RiserConfigurationActivity extends Activity { | |||
| public static final DecimalFormat DF = new DecimalFormat("0.##"); | |||
| private RiserSpinner rcRiserSpinner; | |||
| private TextView rcManufacturerTxtFld; | |||
| private TextView rcModelTxtFld; | |||
| private TextView rcSizeTxtFld; | |||
| private TextView rcVvisHTxtFld; | |||
| private TextView rcVvisVTxtFld; | |||
| private Button newBtn; | |||
| private Button saveBtn; | |||
| private Button deleteBtn; | |||
| private IRiser selectedRiser; | |||
| @Override | |||
| protected void onCreate(final Bundle savedInstanceState) { | |||
| super.onCreate(savedInstanceState); | |||
| @@ -29,6 +66,122 @@ public class RiserConfigurationActivity extends Activity { | |||
| } else { | |||
| setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); | |||
| } | |||
| initializeComponents(); | |||
| addRiserSpinnerListener(); | |||
| addButtonListeners(); | |||
| List<IRiser> risers = RiserDao.getInstance().loadAll(); | |||
| this.rcRiserSpinner.setAdapter(new FontArrayAdapter<IRiser>(this, R.layout.rbs_spinner, risers, this.rcRiserSpinner)); | |||
| } | |||
| private void initializeComponents() { | |||
| this.rcRiserSpinner = (RiserSpinner) findViewById(R.id.rcRiserSpinner); | |||
| this.rcManufacturerTxtFld = (TextView) findViewById(R.id.rcManufacturerTxtFld); | |||
| this.rcModelTxtFld = (TextView) findViewById(R.id.rcModelTxtFld); | |||
| this.rcSizeTxtFld = (TextView) findViewById(R.id.rcSizeTxtFld); | |||
| this.rcVvisHTxtFld = (TextView) findViewById(R.id.rcVvisHTxtFld); | |||
| this.rcVvisVTxtFld = (TextView) findViewById(R.id.rcVvisVTxtFld); | |||
| this.newBtn = (Button) findViewById(R.id.rcBtnNew); | |||
| this.saveBtn = (Button) findViewById(R.id.rcBtnSave); | |||
| this.deleteBtn = (Button) findViewById(R.id.rcBtnDelete); | |||
| } | |||
| private void addRiserSpinnerListener() { | |||
| this.rcRiserSpinner.setOnItemSelectedListener(new OnItemSelectedListener() { | |||
| @Override | |||
| public void onItemSelected(final AdapterView<?> parent, final View view, final int position, | |||
| final long id) { | |||
| IRiser riser = RiserConfigurationActivity.this.rcRiserSpinner.getSelectedRiser(); | |||
| RiserConfigurationActivity.this.rcManufacturerTxtFld.setText(riser.getManufacturer()); | |||
| RiserConfigurationActivity.this.rcModelTxtFld.setText(riser.getModel()); | |||
| RiserConfigurationActivity.this.rcSizeTxtFld.setText(DF.format(riser.getSize())); | |||
| RiserConfigurationActivity.this.rcVvisHTxtFld.setText(DF.format(riser.getVVisH())); | |||
| RiserConfigurationActivity.this.rcVvisVTxtFld.setText(DF.format(riser.getVVisV())); | |||
| RiserConfigurationActivity.this.selectedRiser = riser; | |||
| } | |||
| @Override | |||
| public void onNothingSelected(final AdapterView<?> parent) { } | |||
| }); | |||
| } | |||
| private void addButtonListeners() { | |||
| this.newBtn.setOnClickListener(new OnClickListener() { | |||
| @Override | |||
| public void onClick(final View v) { | |||
| onNewRiser(); | |||
| } | |||
| }); | |||
| this.saveBtn.setOnClickListener(new OnClickListener() { | |||
| @Override | |||
| public void onClick(final View v) { | |||
| onSaveRiser(); | |||
| } | |||
| }); | |||
| this.deleteBtn.setOnClickListener(new OnClickListener() { | |||
| @Override | |||
| public void onClick(final View v) { | |||
| onDeleteRiser(); | |||
| } | |||
| }); | |||
| } | |||
| /** | |||
| * Löschen. | |||
| */ | |||
| protected void onDeleteRiser() { | |||
| if (this.selectedRiser != null) { | |||
| try { | |||
| RiserDao.getInstance().delete(this.selectedRiser); | |||
| } catch (SQLiteConstraintException e) { | |||
| Toast toast = Toast.makeText(this, getResources().getString(R.string.caption_Cfg_DeleteNotPossible), Toast.LENGTH_LONG); | |||
| toast.setGravity(Gravity.CENTER, 0, 0); | |||
| toast.show(); | |||
| } | |||
| } | |||
| } | |||
| /** | |||
| * Speichern. | |||
| */ | |||
| protected void onSaveRiser() { | |||
| if (this.selectedRiser != null) { | |||
| if (!this.rcManufacturerTxtFld.getText().toString().isEmpty() && !this.rcModelTxtFld.getText().toString().isEmpty() | |||
| && !this.rcSizeTxtFld.getText().toString().isEmpty() && !this.rcVvisHTxtFld.getText().toString().isEmpty() | |||
| && !this.rcVvisVTxtFld.getText().toString().isEmpty()) { | |||
| this.selectedRiser.setManufacturer(this.rcManufacturerTxtFld.getText().toString()); | |||
| this.selectedRiser.setModel(this.rcModelTxtFld.getText().toString()); | |||
| this.selectedRiser.setSize(Double.valueOf(this.rcSizeTxtFld.getText().toString())); | |||
| this.selectedRiser.setVVisH(Double.valueOf(this.rcVvisHTxtFld.getText().toString())); | |||
| this.selectedRiser.setVVisV(Double.valueOf(this.rcVvisVTxtFld.getText().toString())); | |||
| if (this.selectedRiser.getId() > 0) { | |||
| RiserDao.getInstance().update(this.selectedRiser); | |||
| } else { | |||
| RiserDao.getInstance().insert(this.selectedRiser); | |||
| } | |||
| } else { | |||
| Toast toast = Toast.makeText(this, getResources().getString(R.string.caption_Cfg_FillAllMandatoryFields), Toast.LENGTH_LONG); | |||
| toast.setGravity(Gravity.CENTER, 0, 0); | |||
| toast.show(); | |||
| } | |||
| } | |||
| } | |||
| /** | |||
| * Einfügen. | |||
| */ | |||
| protected void onNewRiser() { | |||
| // TODO Auto-generated method stub | |||
| } | |||
| @Override | |||
| @@ -83,6 +83,14 @@ public final class RBSDatabaseHelper extends SQLiteOpenHelper { | |||
| } | |||
| } | |||
| @Override | |||
| public void onOpen(final SQLiteDatabase db) { | |||
| super.onOpen(db); | |||
| if (!db.isReadOnly()) { | |||
| db.execSQL("PRAGMA foreign_keys=ON;"); | |||
| } | |||
| } | |||
| @Override | |||
| public void onCreate(final SQLiteDatabase db) { | |||
| @@ -35,8 +35,8 @@ public final class TblRBSArcherySetup { | |||
| return "create table " + NAME + "(" | |||
| + COL_ID + " Integer primary key autoincrement, " | |||
| + COL_NAME + " Text NOT NULL, " | |||
| + COL_SIGHT + " Integer NOT NULL REFERENCES RBS_SIGHT (" + TblRBSSight.COL_ID + "), " | |||
| + COL_RISER + " Integer NOT NULL REFERENCES RBS_RISER (" + TblRBSRiser.COL_ID + "), " | |||
| + COL_SIGHT + " Integer NOT NULL, " | |||
| + COL_RISER + " Integer NOT NULL, " | |||
| + COL_ARROWDIAMETER + " Real NOT NULL, " | |||
| + COL_ARROWCW + " Real NOT NULL, " | |||
| + COL_ARROWWEIGHT + " Real NOT NULL, " | |||
| @@ -50,7 +50,9 @@ public final class TblRBSArcherySetup { | |||
| + COL_SIGHTVERTSKALAMIDDLE + " Real NOT NULL, " | |||
| + COL_SIGHTHORSETTING + " Real NOT NULL, " | |||
| + "constraint UNIQUE_ARCHERYSETUP_NAME UNIQUE (" + COL_NAME + "), " | |||
| + "constraint UNIQUE_ARCHERYSETUP_SIGHT_RISER UNIQUE (" + COL_SIGHT + "," + COL_RISER + ")" | |||
| + "constraint UNIQUE_ARCHERYSETUP_SIGHT_RISER UNIQUE (" + COL_SIGHT + "," + COL_RISER + ")," | |||
| + "FOREIGN KEY(" + COL_SIGHT + ") REFERENCES RBS_SIGHT (" + TblRBSSight.COL_ID + "), " | |||
| + "FOREIGN KEY(" + COL_RISER + ") REFERENCES RBS_RISER (" + TblRBSRiser.COL_ID + ")" | |||
| + ");"; | |||
| } | |||