]> matita.cs.unibo.it Git - logicplayer.git/blobdiff - mainActivity/src/com/example/furt/myapplication/touchnodeHandler.java
New version (to be tested).
[logicplayer.git] / mainActivity / src / com / example / furt / myapplication / touchnodeHandler.java
index 4fcb64de0fa96094622599f734c643f1c7483922..002fb00a2020bc831a9b6aff7eb4d79b286c41f4 100755 (executable)
@@ -1,39 +1,39 @@
 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) {
@@ -49,13 +49,15 @@ public class touchnodeHandler implements View.OnClickListener {
                         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,"");
@@ -63,38 +65,18 @@ public class touchnodeHandler implements View.OnClickListener {
                 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());
@@ -102,40 +84,49 @@ public class touchnodeHandler implements View.OnClickListener {
             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
@@ -151,7 +142,7 @@ public class touchnodeHandler implements View.OnClickListener {
             }
         });
         DrawActivity.globalHP.addView(elim);
-*/
-
     }
 }
+
+