package com.example.furt.myapplication;
import android.graphics.Color;
+import android.graphics.Paint;
import android.util.TypedValue;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.TextView;
-import android.util.Log;
-import android.graphics.Paint;
import java.util.ArrayList;
import java.util.List;
public class touchnodeHandler implements View.OnClickListener {
-
- Node n;
+ static RuleDialog ruleDialog; //il ruleDialog da far comparire nel caso in cui l'utente voglia visualizzare le regole di introduzione disponibili
+ Node n; //nodo a cui è legato questo handler
touchnodeHandler(Node node) {
- n=node;
+ n=node; ruleDialog=null;
}
@Override
public void onClick(View view) {
+ Paint p=new Paint();
+ n.hasFocus=true; //il nodo cliccato ha il focus
TextView v=(TextView)view;
- v.setTextColor(Color.RED);
+ v.setTextColor(Color.RED); //colorazione rossa per il nodo
if (DrawActivity.selectedNode!=null)
- if (DrawActivity.selectedNode.view==view) {
+ if (DrawActivity.selectedNode.view==view) { //doppio clic sul nodo: parte il Dialog per le regole di introduzione
if (DrawActivity.selectedNode.Children.size()==0){
List<IntroductionRule> L=new ArrayList<IntroductionRule>();
-
for (IntroductionRule r: DrawActivity.selectedNode.F.introductionRules())
{
- if (r.getPriority()!=0)
+ if (r.getPriority()!=0) //short click: aggiungo solo le regole a priorità alta
L.add(r);
}
- if (L.size()==1)
+ if (L.size()==1) //c'è una sola regola: la applico immediatamente.
{
Node selectedRule=L.get(0).createNodes(new askFormula());
for (Node n : selectedRule.Children) {
DrawActivity.nmoves++;
DrawActivity.rootNode.Clean();
DrawActivity.startDraw();
+ return;
}
else {
- RuleDialog ruleDialog = new RuleDialog(DrawActivity.selectedNode.F.introductionRules());
+ //parte il ruleDialog
+ ruleDialog = new RuleDialog(DrawActivity.selectedNode.F.introductionRules());
ruleDialog.show(DrawActivity.fragmentManager, "CIAO");
}
}
- else
+ else //nodo intermedio: parte il Dialog per le operazioni di copia/cancella
{
CopyPasteDialog copyPasteDialog=new CopyPasteDialog(DrawActivity.selectedNode);
copyPasteDialog.show(DrawActivity.fragmentManager,"");
return;
}
int i,size;
- if (DrawActivity.selectedNode!=null) {
+ if (DrawActivity.selectedNode!=null) { //c'era già un selectedNode: lo ricoloro adeguatamente.
if(DrawActivity.selectedNode.status==Node.OPEN || DrawActivity.selectedNode.status==Node.FAKE)
DrawActivity.selectedNode.view.setTextColor(Color.BLACK);
else
DrawActivity.selectedNode.view.setTextColor(Color.GRAY);
}
DrawActivity.selectedNode = n;
- DrawActivity.globalHP.removeAllViews();
- size = n.NodeHP.size();
- int leftID=0;
- int headID=0;
- float sum=0;
- final Button elim=new Button(view.getContext());
- String newText = "Nuova";
- elim.setText(newText);
- elim.setTextSize(TypedValue.COMPLEX_UNIT_SP,16);
- elim.setId(DrawActivity.globalId++);
- RelativeLayout.LayoutParams myP2=new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
- elim.setLayoutParams(myP2);
- elim.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- parserDialog p=new parserDialog();
- p.show(DrawActivity.fragmentManager, ""); //parte l'editor per inserire nuove formule
- }
- });
- DrawActivity.globalHP.addView(elim);
- Paint p = new Paint();
- p.setTextSize(DrawActivity.textSize);
- float newSize=p.measureText(newText)+(float)(p.measureText(newText)*0.20) + 200;
- sum+=newSize;
- leftID=elim.getId();
+ DrawActivity.globalHP.removeAllViews(); //rimuovo le eventuali vecchie ipotesi per mostrare quelle del nuovo selectedNode
+ size = n.NodeHP.size(); //numero di ipotesi
+ int leftID=0; //ID dell'eventuale ipotesi a destra della quale dev'essere posizionata l'ipotesi (0=assente)
+ int headID=0; //ID dell'eventuale ipotesi sotto la quale deve comparire l'ipotesi (0=assente)
+ float sum=0; //lunghezza raggiunta finora: se supera la larghezza dello schermo devo andare a capo
for (i = 0; i<size; i++) //fa apparire le ipotesi cancellate
{
final TextView newT=new TextView(view.getContext());
newT.setText(n.NodeHP.get(i).HP.toString());
newT.setTextSize(TypedValue.COMPLEX_UNIT_SP,30);
newT.setId(DrawActivity.globalId++);
+ if (i==0) //prima ipotesi: sarà il leftID per le successive
+ leftID=newT.getId();
myP.setMargins(50,0,0,0);
- sum+=n.NodeHP.get(i).HP.size();
- if (sum>(DrawActivity.v.widthPixels/1.5)) //ho superato la larghezza dello schermo: devo andare a capo
+ float thisSize;
+ p.setTextSize(30);
+ thisSize=p.measureText(newT.getText().toString()); //misuro la larghezza dell'ipotesi inserita
+ thisSize+=thisSize*0.2; //con un'approssimazione per eccesso del 20%
+ sum+=thisSize; //aggiungo alla somma totale la larghezza di questa ipotesi e della spaziatura
+ sum+=50;
+ if (sum>(DrawActivity.v.widthPixels+20)) //ho superato la larghezza dello schermo: devo andare a capo
{
- sum=n.NodeHP.get(i).HP.size();
- headID=leftID;
+ sum=thisSize; //il nuovo nodo è il primo della nuova riga
+ headID=leftID; //tutti gli altri devono stare sotto un nodo della riga precedente
}
else
- myP.addRule(RelativeLayout.RIGHT_OF,leftID);
+ myP.addRule(RelativeLayout.RIGHT_OF,leftID); //non vado a capo: mi limito a posizionarmi a destra del leftID
if (headID!=0)
- myP.addRule(RelativeLayout.BELOW,headID);
+ myP.addRule(RelativeLayout.BELOW,headID); //mi posiziono sotto l'headID se esiste
newT.setLayoutParams(myP);
List<EliminationRule> R=n.NodeHP.get(i).HP.EliminationRules();
- if (R.size()!=0) {
+ if (R.size()!=0) { //ci sono regole di eliminazione per questa formula
Node L= R.get(0).createNodes(null,new askFormula());
newT.setOnClickListener(new touchHPHandler(L,n.NodeHP.get(i)));
}
- else
+ else //setto comunuqe il listener nel caso in cui la formula venga scaricata
newT.setOnClickListener(new touchHPHandler(null,n.NodeHP.get(i)));
- newT.setOnLongClickListener(new LongHPClick(n.NodeHP.get(i).fromNode));
- leftID=newT.getId();
+ newT.setOnLongClickListener(new LongHPClick(n.NodeHP.get(i).fromNode)); //setto un longclick listener che mostra il nodo da cui viene l'ipotesi
+ leftID=newT.getId(); //aggiorno il leftID
DrawActivity.globalHP.addView(newT);
}
-/*
+ //disegno il bottone utilizzando lo stesso algoritmo utilizzato per le ipotesi
+
final Button elim=new Button(view.getContext());
RelativeLayout.LayoutParams myP=new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
- elim.setText("Nuova");
+ elim.setText("Nuova...");
elim.setTextSize(TypedValue.COMPLEX_UNIT_SP,16);
elim.setId(DrawActivity.globalId++);
myP.setMargins(50,0,0,0);
- sum+=elim.getWidth();
+ p.setTextSize(16);
+ float buttonSize=p.measureText("Nuova...");
+ sum+=buttonSize;
if (sum>(DrawActivity.v.widthPixels/1.5)) //ho superato la larghezza dello schermo: devo andare a capo
{
- sum=n.NodeHP.get(i).HP.size();
headID=leftID;
}
else
}
});
DrawActivity.globalHP.addView(elim);
-*/
-
}
}
+
+