+++ /dev/null
-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 java.util.ArrayList;
-import java.util.List;
-
-public class touchnodeHandler implements View.OnClickListener {
- 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; 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); //colorazione rossa per il nodo
- if (DrawActivity.selectedNode!=null)
- 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) //short click: aggiungo solo le regole a priorità alta
- L.add(r);
- }
- if (L.size()==1) //c'è una sola regola: la applico immediatamente.
- {
- Node selectedRule=L.get(0).createNodes(new askFormula());
- for (Node n : selectedRule.Children) {
- for (Hypothesis hp : n.NodeHP)
- hp.fromNode = DrawActivity.selectedNode; //le ipotesi dei nuovi figli provengono dal nodo in cui stanno per essere inserite
- n.addHPList(DrawActivity.selectedNode.NodeHP);
- n.handler = null;
- DrawActivity.selectedNode.addChild(n);
- }
- DrawActivity.selectedNode.hasFocus = false;
- DrawActivity.selectedNode.ruleName = selectedRule.Children.get(0).ruleName;
- DrawActivity.selectedNode.Children.get(0).hasFocus = true;
- DrawActivity.nmoves++;
- DrawActivity.rootNode.Clean();
- DrawActivity.startDraw();
- return;
- }
- else {
- //parte il ruleDialog
- ruleDialog = new RuleDialog(DrawActivity.selectedNode.F.introductionRules());
- ruleDialog.show(DrawActivity.fragmentManager, "CIAO");
- }
- }
- 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) { //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(); //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());
- RelativeLayout.LayoutParams myP=new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
- newT.setText(n.NodeHP.get(i).HP.toString());
- newT.setTextSize(20);
- newT.setId(DrawActivity.globalId++);
- if (i==0) //prima ipotesi: sarà il leftID per le successive
- leftID=newT.getId();
- myP.setMargins(50,0,0,0);
- float thisSize;
- p.setTextSize(20);
- 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+=100;
- if (sum>(DrawActivity.v.widthPixels+20)) //ho superato la larghezza dello schermo: devo andare a capo
- {
- 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); //non vado a capo: mi limito a posizionarmi a destra del leftID
- if (headID!=0)
- 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) { //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 //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)); //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.setTextSize(TypedValue.COMPLEX_UNIT_SP,16);
- elim.setId(DrawActivity.globalId++);
- myP.setMargins(50,0,0,0);
- 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
- {
- headID=leftID;
- }
- else
- myP.addRule(RelativeLayout.RIGHT_OF,leftID);
- if (headID!=0)
- myP.addRule(RelativeLayout.BELOW, headID);
- elim.setLayoutParams(myP);
- 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);
- }
-}
-
-