#include "ThreadQt.h"
//
//##############################################################################
//                          ThreadQt.cpp
//
//                     Class ThreadQt implementation.
//
// Math 157   March, 11, 2009                                         (C) UCLA  
//##############################################################################
//
ThreadQt::ThreadQt(QWidget *parent): QMainWindow(parent)
{
     setupUi(this);
    
     matrixMultThread.setMatrixSize(400);
     sizeSpinBox->setValue(400);
          
     QObject::connect(runNoThreadButton, SIGNAL(clicked()),   this, SLOT(on_runNoThreadButton_clicked()));
     QObject::connect(startThreadButton, SIGNAL(clicked()),   this, SLOT(on_startThreadButton_clicked()));
     QObject::connect(stopThreadButton, SIGNAL(clicked()),    this, SLOT(on_stopThreadButton_clicked()));
     
     QObject::connect(&matrixMultThread,SIGNAL(started()),  this, SLOT(threadStart()));
     QObject::connect(&matrixMultThread,SIGNAL(finished()), this, SLOT(threadStop()));
}

void ThreadQt::on_runNoThreadButton_clicked()
{
	//
	// Calls run() of the ThreadedMatrixMult instance
	// directly so it's not done in a separate thread.
	//
	statusBox->setText("Started");
	double matrixSize =  (double)sizeSpinBox->value();
	matrixMultThread.setMatrixSize(matrixSize);
	matrixMultThread.run();
    statusBox->setText("Run (no thread) Finished");
}

void ThreadQt::on_startThreadButton_clicked()
{
	double matrixSize =  (double)sizeSpinBox->value();
	matrixMultThread.setMatrixSize(matrixSize);
	matrixMultThread.start(QThread::LowPriority);
	statusBox->setText("Thread Started");
}

void ThreadQt::on_stopThreadButton_clicked()
{
	matrixMultThread.stop();
	statusBox->setText("Thread Stopped");
}

void ThreadQt::threadStart()
{
   statusBox->setText("Thread Running");
}

void ThreadQt::threadStop()
{
   statusBox->setText("Thread Finished");
}
