package com.lateensoft.pathfinder.toolkit.views.character; import android.content.res.Resources; import android.os.Parcelable; import android.widget.CheckBox; import android.widget.EditText; import android.widget.Spinner; import com.lateensoft.pathfinder.toolkit.R; import com.lateensoft.pathfinder.toolkit.model.character.items.Size; import com.lateensoft.pathfinder.toolkit.model.character.items.Weapon; import com.lateensoft.pathfinder.toolkit.model.character.items.WeaponType; import com.lateensoft.pathfinder.toolkit.views.ParcelableEditorActivity; public class WeaponEditActivity extends ParcelableEditorActivity { @SuppressWarnings("unused") private static final String TAG = WeaponEditActivity.class.getSimpleName(); private static final int ATK_BONUS_OFFSET = 10; private Spinner m_highestAtkSpinner; private EditText m_ammoET; private Spinner m_sizeSpinner; private Spinner m_typeSpinner; private EditText m_rangeET; private EditText m_weightET; private EditText m_nameET; private EditText m_damageET; private EditText m_criticalET; private EditText m_quantityET; private CheckBox m_itemContainedCheckbox; private EditText m_specialPropertiesET; private Weapon m_weapon; private boolean m_weaponIsNew = false; @Override protected void setupContentView() { setContentView(R.layout.weapon_editor); m_nameET = (EditText) findViewById(R.id.etWeaponName); m_highestAtkSpinner = (Spinner) findViewById(R.id.spWeaponHighestAtk); m_ammoET = (EditText) findViewById(R.id.etWeaponAmmo); m_typeSpinner = (Spinner) findViewById(R.id.spWeaponType); m_sizeSpinner = (Spinner) findViewById(R.id.spWeaponSize); m_rangeET = (EditText) findViewById(R.id.etWeaponRange); m_criticalET = (EditText) findViewById(R.id.etWeaponCrit); m_damageET = (EditText) findViewById(R.id.etWeaponDamage); m_weightET = (EditText) findViewById(R.id.etWeaponWeight); m_quantityET = (EditText) findViewById(R.id.etItemQuantity); m_itemContainedCheckbox = (CheckBox) findViewById(R.id.checkboxItemContained); m_specialPropertiesET = (EditText) findViewById( R.id.etWeaponSpecialProperties); setupSpinner(m_highestAtkSpinner, R.array.weapon_attack_bonus_options, ATK_BONUS_OFFSET, null); Resources resources = getResources(); setupSpinner(m_sizeSpinner, Size.getValuesSortedNames(resources), 0, null); setupSpinner(m_typeSpinner, WeaponType.getValuesSortedNames(resources), 0, null); if(m_weaponIsNew) { setTitle(R.string.new_weapon_title); m_highestAtkSpinner.setSelection(ATK_BONUS_OFFSET); } else { setTitle(R.string.edit_weapon_title); m_nameET.setText(m_weapon.getName()); m_ammoET.setText(Integer.toString(m_weapon.getAmmunition())); m_highestAtkSpinner.setSelection(m_weapon.getTotalAttackBonus() + ATK_BONUS_OFFSET); m_damageET.setText(m_weapon.getDamage()); m_criticalET.setText(m_weapon.getCritical()); m_sizeSpinner.setSelection(m_weapon.getSize().getValuesIndex()); m_rangeET.setText(Integer.toString(m_weapon.getRange())); m_typeSpinner.setSelection(getWeaponTypeIndex(m_weapon.getType())); m_weightET.setText(Double.toString(m_weapon.getWeight())); m_quantityET.setText(Integer.toString(m_weapon.getQuantity())); m_itemContainedCheckbox.setChecked(m_weapon.isContained()); m_specialPropertiesET.setText(m_weapon.getSpecialProperties()); } } public int getWeaponTypeIndex(WeaponType type) { WeaponType[] types = WeaponType.values(); for(int i = 0; i < types.length; i++) { if(type == types[i]) return i; } throw new IllegalArgumentException("Invalid weapon type"); } private String getStringByResourceAndIndex(int resourceId, int position) { Resources r = getResources(); String[] resource = r.getStringArray(resourceId); return resource[position]; } @Override protected void updateEditedParcelableValues() throws InvalidValueException { String name = m_nameET.getText().toString(); if(name == null || name.isEmpty()) { throw new InvalidValueException(getString(R.string.editor_name_required_alert)); } int attack = m_highestAtkSpinner.getSelectedItemPosition() - ATK_BONUS_OFFSET;; double weight; try { weight = Double.parseDouble(m_weightET.getText().toString()); } catch (NumberFormatException e) { weight = 1; } int quantity; try { quantity = Integer.parseInt(m_quantityET.getText().toString()); } catch (NumberFormatException e) { quantity = 1; } int range = m_weapon.getRange(); try { range = Integer.parseInt(m_rangeET.getText().toString()); } catch (NumberFormatException e) { // Do not change range } int ammo = m_weapon.getAmmunition(); try { ammo = Integer.parseInt(m_ammoET.getText().toString()); } catch (NumberFormatException e) { // Do not change ammo } String damage = m_damageET.getText().toString(); String critical = m_criticalET.getText().toString(); String specialProperties = m_specialPropertiesET.getText().toString(); int typeIndex = m_typeSpinner.getSelectedItemPosition(); int sizeIndex = m_sizeSpinner.getSelectedItemPosition(); m_weapon.setName(name); m_weapon.setTotalAttackBonus(attack); m_weapon.setWeight(weight); m_weapon.setRange(range); m_weapon.setAmmunition(ammo); m_weapon.setDamage(damage); m_weapon.setCritical(critical); m_weapon.setSpecialProperties(specialProperties); m_weapon.setType(weaponTypeForIndex(typeIndex)); m_weapon.setSize(Size.forValuesIndex(sizeIndex)); m_weapon.setQuantity(quantity); m_weapon.setContained(m_itemContainedCheckbox.isChecked()); } public static WeaponType weaponTypeForIndex(int index) { return WeaponType.values()[index]; } @Override protected Parcelable getEditedParcelable() { return m_weapon; } @Override protected void setParcelableToEdit(Parcelable p) { if (p == null) { m_weaponIsNew = true; m_weapon = new Weapon(); } else { m_weapon = (Weapon) p; } } @Override protected boolean isParcelableDeletable() { return !m_weaponIsNew; } }