--- /dev/null
+package com.example.furt.myapplication;
+
+import android.view.View;
+import android.widget.Toast;
+
+public class touchHPHandler implements View.OnClickListener
+{
+ Node L; //nodo contenente il sottoalbero successivo all'eliminazione dell'ipotesi
+ boolean discard;
+ Hypothesis thisHP; //ipotesi che sto eliminando
+ touchHPHandler(Node n,Hypothesis hp)
+ {
+ L=n;
+ thisHP=hp;
+ discard=true;//di default il ramo della formula scartata viene chiuso
+ }
+ public void onClick(View view)
+ {
+ if (DrawActivity.selectedNode==null) //selectedNode non esiste (non dovrebbe mai succedere)
+ return;
+ if (DrawActivity.selectedNode.Children.size()!=0) //non è una foglia: non si possono applicare regole.
+ {
+ Toast.makeText(DrawActivity.rootNode.view.getContext(),"Impossibile scaricare ipotesi su nodi intermedi",Toast.LENGTH_LONG).show();
+ return;
+ }
+ if (thisHP.HP.toString().equals(DrawActivity.selectedNode.F.toString())) //sto scaricando una formula uguale al nodo corrente: lo chiudo aggiornando lo stato del nodo
+ {
+ if (thisHP.isDeleted) {
+ if (DrawActivity.selectedNode.status == Node.OPEN)
+ DrawActivity.selectedNode.status = Node.CANCELED;
+ else if (DrawActivity.selectedNode.status == Node.FAKE)
+ DrawActivity.selectedNode.status = Node.FAKE_CANCELED;
+ } else {
+ if (DrawActivity.selectedNode.status == Node.OPEN)
+ DrawActivity.selectedNode.status = Node.CLOSED;
+ else if (DrawActivity.selectedNode.status == Node.FAKE)
+ DrawActivity.selectedNode.status = Node.FAKE_CLOSED;
+ }
+ DrawActivity.nmoves++;
+ DrawActivity.rootNode.Clean();
+ DrawActivity.startDraw();
+ return;
+ }
+ if (L==null) //eliminazione incompatibile con il nodo attuale
+ {
+ Toast.makeText(DrawActivity.rootNode.view.getContext(),"Impossibile scaricare questa ipotesi ora",Toast.LENGTH_LONG).show();
+ return;
+ }
+ for (Node n:L.Children) { //aggiungo al sottoalbero della regola da applicare tutte le ipotesi del selectedNode. In più aggiungo alle ipotesi introdotte da questa regola il fromNode corretto.
+ 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);
+ DrawActivity.selectedNode.addChild(n);
+ }
+ DrawActivity.selectedNode.hasFocus=false; //il nodo su cui ho applicato la regola non è più una foglia e non ha più focus
+ DrawActivity.selectedNode.ruleName = L.ruleName;
+ DrawActivity.selectedNode.Children.get(0).hasFocus=true; //il primo figlio dell'applicazione della regola ha di default il focus
+ if(discard) { //sto scaricando un'ipotesi: il primo figlio è automaticamente chiuso
+ if (thisHP.isDeleted)
+ DrawActivity.selectedNode.Children.get(0).status = Node.CANCELED;
+ else
+ DrawActivity.selectedNode.Children.get(0).status = Node.CLOSED;
+ }
+ else
+ DrawActivity.selectedNode.Children.get(0).status= Node.OPEN;
+ DrawActivity.nmoves++;
+ DrawActivity.rootNode.Clean();
+ DrawActivity.startDraw();
+ }
+}