package int_test;
 
import java.text.DecimalFormat;
import java.util.Vector;
import javax.swing.JEditorPane;
import javax.swing.JProgressBar;
 
public class Silnik_przeszukiwanie_przedzialu extends Thread {
public JEditorPane log;
public JEditorPane wyniki;

public String rownanie;
public double gora;
public double dol;
public double krok;
public JProgressBar progres;         // stan obliczen, watek
public javax.swing.JPanel panel;     // glowny panel strony enable/disable
private String historia_buf="";      // dziennik
private String wyniki_buf="";        // wyniki

public Vector<String> his_v;
public Vector<String> wyn_v;

private String buf;

public synchronized void run() {
     this.progres.setVisible(true);
     this.panel.setEnabled(false);

     DecimalFormat df = new DecimalFormat("#,###.#########");
     double new_val = 0.0D; // wartosc rownania w punkcie - nowa
     double val = 0.0D; // wartosc rownania w punkcie
     double old_co = 0.0D;
     String kolor="";

     String bufor = "";
     bufor ="<table class='metoda' cellpadding='0' cellspacing='0' >";
     bufor+="<tr><td colspan='2' class='tyt' > PRZESZUKIWANIE PRZEDZIAŁU </td></tr>";
     bufor+="<tr><td class='rownanie' > f(x)="+this.rownanie+" </td>";
     bufor+="<td class='przedzial' >Przedział od <b> " + this.dol + "</b> do <b>" + this.gora + " </b>, krok <b>"+this.krok+"</b> </td></tr>";
     bufor+="</table>";
     wyniki_buf="";
     historia_buf="";

     int step = 0;
     for (double co = this.dol; co <= this.gora; co += this.krok) {
       step++;
       val = new_val;
       try {
           new_val = statyczne_metody.licz_rownanie(this.rownanie, co);
           }catch(Exception e) {
             System.out.print(e);
           }
     if ((new_val==0) && (step > 1)) {
        wyniki_buf+=" &lt;&thinsp;<b>" + df.format(old_co) + "</b>&thinsp;;&thinsp;<b>" + df.format(co) + "</b>&thinsp;&gt; \n";
        historia_buf+="<tr ><td colspan='2' class='wynik' > - znaleziono rozwiązanie!</td></tr>\n";
       }
     if((new_val * val < 0.0D) && (step > 1)) {
        wyniki_buf+=" &lt;&thinsp;<b>" + df.format(old_co) + "</b>&thinsp;;&thinsp;<b>" + df.format(co) + "</b>&thinsp;&gt; \n";
        historia_buf+="<tr ><td colspan='2' class='wynik' > - znaleziono rozwiązanie!</td></tr>\n";
        }
     if(step % 2 == 1)
         kolor=" class='gray' ";
       else kolor="";
     historia_buf+="<tr "+kolor+" ><td class='lewy' > f(" + df.format(co) + ") = </td><td  class='prawy' > " + df.format(new_val) + "</td></tr>\n";
     old_co = co;
     }
    historia_buf+="<tr "+kolor+" ><td colspan='2' ><center>Liczba wykonanych iteracji = " + step + "</center></td></tr>\n";
    if(historia_buf.length()!=0)
        historia_buf=bufor+"<table class='lista' >"+historia_buf+"</table>";
     
    if(wyniki_buf.length()!=0)
        wyniki_buf=bufor+"<div class='wyniki' ><b>Rozwiązania: </b>"+wyniki_buf+"</div>";
        else wyniki_buf=bufor+"<div class='wynik2' ><b>W przedziale nie znaleziono rozwiązania ! </b></div>";

    wyn_v.add(wyniki_buf);
    his_v.add(historia_buf);

    log.setText("<html><head>"+statyczne_metody.mkStyle()+"</head><body>"+statyczne_metody.serializer(his_v)+"</body></html>");
    wyniki.setText("<html><head>"+statyczne_metody.mkStyle()+"</head><body>"+statyczne_metody.serializer(wyn_v)+"</body></html>");

    //pokazywanie zablokowanych elementow interfejsu
    this.progres.setValue(0);
    this.progres.setVisible(false);
    this.panel.setEnabled(true);
   }
 }
