#include <converterwidget.h>

ConverterWidget::ConverterWidget(QWidget *parent) :  TabWidgets(parent)
{
  getToolbar()->setVisible(false);
  mainSplitter->setOrientation(Qt::Horizontal);

  TableWidget *tw1 = new TableWidget(this);

  tw1->setAutoScroll(true);

  QPushButton *aktion=new QPushButton("OK",this);
  //aktion = new QPushButton(tr("OK"));
  aktion->setObjectName(QString::fromUtf8("okButton"));
  QObject::connect(aktion, SIGNAL(clicked()),this, SLOT(convert()));
  mainSplitter->addWidget(tw1);
  mainSplitter->addWidget(aktion);
  

  layout = new QVBoxLayout;
  layout->addWidget(mainSplitter);
  setLayout(layout);
  th1=0;
  th2=0;
  fin=0;
  fout=0;
}
void ConverterWidget::convert()
{
  if(th1!=0)
  {
    delete fout;
    delete fin;
    delete th1;
    delete th2;
    delete progress;
    progress=0;
    th1=0;
    th2=0;
    fin=0;
    fout=0;
  }
  fout=new QFile("out.csv");
  fin=new QFile("DATANORM.001");
  int zeilenZahl=0;
  fout->remove();
  if (fout->open(QIODevice::WriteOnly | QIODevice::Text)) //QIODevice::Append
  {
    QTextStream out(fout);
    out << "Satzkennzeichen;Verarbeitungskennzeichen;Artikelnummer;Kurztextteile1;"
                        "Kurztextteile2;Mengeneinheit;Preiskennzeichen;Preiseinheit;Preis;"
                        "Rabattgruppe;Hauptwarengruppe;Warengruppe;Matchcode;AlternativnummerErsteller;"
                        "AlternativArtikelnummer;HerstellernummerErsteller;Herstellernummer;Herstellertype;"
                        "EANNummer;Anbindnummer;Mindestverpackungsmenge;Katalogseite;Textkennzeichen;Langtextnummer;"
                        "Kostenart;Lagermerker;ReferenznummerErsteller;Referenznummer;Mehrwertsteuermerker;"
                        "Satzkennzeichen;Verarbeitungskennzeichen;Artikelnummer;Zeilennummer;Bearbeitungsmerker;"
                        "Rohstoffmerker;Preiskennzeichen;Preiseinheit;Bezugspreisbasis;Uf. Multi;Uf. f�r Gewicht;"
                        "Sonder Preis oder Umrechnungsfaktor;info1;info2;info3;info4;Satzkennzeichen;Artikelnummer;Preiskennzeichen;Preiseinheit;Preis\n";
    fout->close();
    if (fin->open(QIODevice::ReadOnly | QIODevice::Text))
    {
      while (!fin->atEnd())
      {
        fin->readLine();
        zeilenZahl++;
      }
      fin->close();
    }

  }
  fout->open(QIODevice::Append | QIODevice::Text);
  th1=new ConverterThread("f.001",fout,this);
  th2=new ConverterThread("f.001",fout,this);
  progress = new ProgressFrame("Konvertiere...","Abbrechen",0,zeilenZahl,this);
    
  //connect(th1,SIGNAL(finished()),this,SLOT(thread1Ready()));
 // connect(th2,SIGNAL(finished()),this,SLOT(thread2Ready()));
  connect(th1,SIGNAL(emitLineCount(int)),progress,SLOT(setVal(int)));
  connect(th2,SIGNAL(emitLineCount(int)),progress,SLOT(setVal(int)));
  connect(progress,SIGNAL(canceled()),th1,SLOT(terminate()));
  connect(progress,SIGNAL(canceled()),th2,SLOT(terminate()));
  connect(progress,SIGNAL(canceled()),this,SLOT(cancel()));

  th1->setProzessIntervall(0,zeilenZahl/2+1);
  th2->setProzessIntervall(zeilenZahl/2,zeilenZahl+1);
  
  th2->start();
  th1->start();
  
}
void ConverterWidget::thread2Ready(int t)
{

}
void ConverterWidget::thread1Ready()
{}
void ConverterWidget::cancel()
{
    fout->close();

    delete fout;
    delete fin;
    delete th1;
    delete th2;
    delete progress;
    progress=0;
    th1=0;
    th2=0;
    fin=0;
    fout=0;
}
void ConverterWidget::waitForThreads()
{
  if(th1!=0)
  {
    th1->wait();
    th2->wait();
  }
}
void ConverterWidget::killThreads()
{
  if(th1!=0)
  {
    th1->terminate();
    th2->terminate();
  }
}
ConverterWidget::~ConverterWidget()
{
  if(DEBUG)
  {
    QMessageBox msgBox;
    msgBox.setText("converter");
    msgBox.exec();
  }
  waitForThreads();
  if(th1!=0)
  {
    delete th2;
    delete th1;
    delete fout;
    delete fin;
    delete progress;
  }
  delete layout;
}
