package uni.projecte.dataLayer.ProjectManager;
import java.util.ArrayList;
import java.util.Arrays;
import uni.projecte.R;
import uni.projecte.controler.DataTypeControler;
import uni.projecte.controler.ProjectControler;
import uni.projecte.dataTypes.ProjectField;
import uni.projecte.dataTypes.Utilities;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Spinner;
public class FieldModifyDialog extends Dialog{
private Context context;
private long projId;
private ProjectControler projCnt;
private DataTypeControler dtH;
private LinearLayout fieldModDialog;
private ProjectField projField;
private ArrayAdapter<String> adapter;
private Spinner spValuesList;
private boolean modifiedList;
/*
* This class creates a dialog that allows us to modified the field's label.
* It's also possible to modify the items when the field is complex (has a list of items)
*
*/
public FieldModifyDialog(Context context,long projId,ProjectField projField,ProjectControler projCnt) {
super(context);
this.context=context;
this.projId=projId;
this.projField=projField;
this.projCnt=projCnt;
}
@Override
protected void onCreate(final Bundle savedInstanceState){
super.onCreate(savedInstanceState);
fieldModDialog=(LinearLayout) LayoutInflater.from(context).inflate(R.layout.field_edit, null);
setContentView(fieldModDialog);
dtH=new DataTypeControler(context);
modifiedList=false;
bindEvents();
}
private void bindEvents() {
final EditText etFieldName = (EditText)fieldModDialog.findViewById(R.id.etFieldName);
final Button btModifyField = (Button)fieldModDialog.findViewById(R.id.btModifyField);
spValuesList = (Spinner)fieldModDialog.findViewById(R.id.sPrefFields);
final Button removeValue = (Button)fieldModDialog.findViewById(R.id.bRemovePredField);
final Button addValue = (Button)fieldModDialog.findViewById(R.id.bAddPredField);
if(projField.isPredefined()){
fillAdapter();
addValue.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
EditText et=(EditText)fieldModDialog.findViewById(R.id.etPredValue);
String text=et.getText().toString();
if(!text.equals("")){
addItem(text);
modifiedList=true;
et.setText("");
}
}
});
removeValue.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
removeSelectedItem();
modifiedList=true;
}
});
}
else ((LinearLayout)fieldModDialog.findViewById(R.id.llPredefinedValues)).setVisibility(View.GONE);
etFieldName.setText(projField.getLabel());
btModifyField.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
String labelName=etFieldName.getText().toString();
projCnt.changeLabelName(projId, projField.getId(), labelName);
projField.setLabel(labelName);
if(projField.isPredefined() && modifiedList){
dtH.removeItemsFromField(projField.getId());
addNewItems();
}
Utilities.showToast(context.getString(R.string.fieldLabelChanged)+": "+labelName, context);
dismiss();
}
});
}
/*
* Inserting new items to database (previously has been cleared)
*
*/
private void addNewItems() {
int n=adapter.getCount();
for(int i=0; i<n; i++){
projCnt.addFieldItem(projField.getId(),adapter.getItem(i));
}
}
/*
*
* Populating spinner with items' list
*
*/
private void fillAdapter() {
String[] items=dtH.getItemsbyFieldId(projField.getId());
ArrayList<String> values = new ArrayList<String>();
values.addAll(Arrays.asList(items));
adapter = new ArrayAdapter<String>(context,
android.R.layout.simple_spinner_item, values);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spValuesList.setAdapter(adapter);
}
private void addItem(String itemValue){
if(adapter.getCount()>0) {
int pos=spValuesList.getSelectedItemPosition();
adapter.insert(itemValue, pos+1);
spValuesList.setSelection(pos+1);
}
else adapter.insert(itemValue, 0);
adapter.notifyDataSetChanged();
}
private void removeSelectedItem(){
adapter.remove((String)spValuesList.getSelectedItem());
adapter.notifyDataSetChanged();
}
}