]> matita.cs.unibo.it Git - logicplayer.git/blob - mainActivity/src/com/example/furt/myapplication/touchHPHandler.java
0e62a534947d999d3465ac0a245cf16a21549944
[logicplayer.git] / mainActivity / src / com / example / furt / myapplication / touchHPHandler.java
1 package com.example.furt.myapplication;
2
3 import android.view.View;
4 import android.widget.Toast;
5
6 public class touchHPHandler implements View.OnClickListener
7 {
8     Node L; //nodo contenente il sottoalbero successivo all'eliminazione dell'ipotesi
9     boolean discard;
10     Hypothesis thisHP; //ipotesi che sto eliminando
11     touchHPHandler(Node n,Hypothesis hp)
12     {
13         L=n;
14         thisHP=hp;
15         discard=true;//di default il ramo della formula scartata viene chiuso
16     }
17     public void onClick(View view)
18     {
19         if (DrawActivity.selectedNode==null) //selectedNode non esiste (non dovrebbe mai succedere)
20             return;
21         if (DrawActivity.selectedNode.Children.size()!=0) //non è una foglia: non si possono applicare regole.
22         {
23             Toast.makeText(DrawActivity.rootNode.view.getContext(),"Impossibile scaricare ipotesi su nodi intermedi",Toast.LENGTH_LONG).show();
24             return;
25         }
26         if (thisHP.HP.toString().equals(DrawActivity.selectedNode.F.toString())) //sto scaricando una formula uguale al nodo corrente: lo chiudo aggiornando lo stato del nodo
27         {
28             if (thisHP.isDeleted) {
29                 if (DrawActivity.selectedNode.status == Node.OPEN)
30                     DrawActivity.selectedNode.status = Node.CANCELED;
31                 else if (DrawActivity.selectedNode.status == Node.FAKE)
32                     DrawActivity.selectedNode.status = Node.FAKE_CANCELED;
33             } else {
34                 if (DrawActivity.selectedNode.status == Node.OPEN)
35                     DrawActivity.selectedNode.status = Node.CLOSED;
36                 else if (DrawActivity.selectedNode.status == Node.FAKE)
37                     DrawActivity.selectedNode.status = Node.FAKE_CLOSED;
38             }
39             DrawActivity.nmoves++;
40             DrawActivity.rootNode.Clean();
41             DrawActivity.startDraw();
42             return;
43         }
44         if (L==null) //eliminazione incompatibile con il nodo attuale
45         {
46             Toast.makeText(DrawActivity.rootNode.view.getContext(),"Impossibile scaricare questa ipotesi ora",Toast.LENGTH_LONG).show();
47             return;
48         }
49         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.
50             for (Hypothesis hp:n.NodeHP)
51                 hp.fromNode= DrawActivity.selectedNode; //le ipotesi dei nuovi figli provengono dal nodo in cui stanno per essere inserite
52             n.addHPList(DrawActivity.selectedNode.NodeHP);
53             DrawActivity.selectedNode.addChild(n);
54         }
55         DrawActivity.selectedNode.hasFocus=false; //il nodo su cui ho applicato la regola non è più una foglia e non ha più focus
56         DrawActivity.selectedNode.ruleName = L.ruleName;
57         DrawActivity.selectedNode.Children.get(0).hasFocus=true; //il primo figlio dell'applicazione della regola ha di default il focus
58         if(discard) { //sto scaricando un'ipotesi: il primo figlio è automaticamente chiuso
59             if (thisHP.isDeleted)
60                 DrawActivity.selectedNode.Children.get(0).status = Node.CANCELED;
61             else
62                 DrawActivity.selectedNode.Children.get(0).status = Node.CLOSED;
63         }
64         else
65             DrawActivity.selectedNode.Children.get(0).status= Node.OPEN;
66         DrawActivity.nmoves++;
67         DrawActivity.rootNode.Clean();
68         DrawActivity.startDraw();
69     }
70 }