<commit_before>//Nagłówki z katalogu QtCore
#include <QtCore/QFile>
#include <QtCore/QTextStream>
#include <QtCore/QString>

//Nagłówki z katalogu QtWidgets
#include <QtWidgets/QFileDialog>
#include <QtWidgets/QMessageBox>
#include <QtWidgets/QLabel>

//Standardowe nagłówki C/C++
#include <iostream>
#include <cstdint>

//Nagłówki z katalogu programu
#include "TrybProgramowalny.hpp"
#include "GlowneOkno.hpp"

TrybProgramowalny::TrybProgramowalny(GlowneOkno* rodzic=0):QWidget((QMainWindow*)rodzic)
{
	czasCalkowity_= new uint32_t(0);
	rodzic_=rodzic;
	rozmieszczacz_=new QVBoxLayout(this);
	rozmieszczaczeWierszowe_=new QHBoxLayout[2];
	
	rozmieszczacz_->addLayout(&(rozmieszczaczeWierszowe_[0]));
	rozmieszczacz_->addLayout(&(rozmieszczaczeWierszowe_[1]));
	
	czasWskaznik_=new QLabel("Można wczytać program użytkownika.",this);
	rozmieszczaczeWierszowe_[0].addWidget(czasWskaznik_);
	
	wczytaj_=new QPushButton("Wczytaj",this);
	rozmieszczaczeWierszowe_[1].addWidget(wczytaj_);
	startStop_=new QPushButton("Start",this);
	rozmieszczaczeWierszowe_[1].addWidget(startStop_);
	
	program_=new QVector <Rozkaz>;
	
	zegar_=new QTimer(this);
	
	QObject::connect(wczytaj_, SIGNAL(clicked(bool)),this, SLOT(wczytajProgram()));
	QObject::connect(startStop_, SIGNAL(clicked(bool)),this, SLOT(start()));
	QObject::connect(zegar_, SIGNAL(timeout()),this, SLOT(obsluzMaszyneStanow()));
}

TrybProgramowalny::~TrybProgramowalny()
{
	delete zegar_;
	delete wczytaj_;
	delete startStop_;
	delete czasWskaznik_;
	delete[] rozmieszczaczeWierszowe_;
	delete rozmieszczacz_;
	delete program_;
}

void TrybProgramowalny::obsluzMaszyneStanow(void)
{
	zegar_->start(1000);	//ponownie uruchom zegar
	
	if((*czasCalkowity_)>0)
		(*czasCalkowity_)--;
	
	//Jeśli nie ma rozkazów do wykonania
	if(program_->isEmpty())
	{
		/*Wyświetl komunikat o zakończeniu programu*/
		wyswietlTekst("Zakończono program użytkownika.",false);
		stop();
		return;
	}
	
	//Jeśli program ma czekać
	if(program_->first().stan==CZEKAJ)
	{
		if(program_->first().wartosc>1)
		{
			char tmp[64];
			program_->first().wartosc--;	//Odlicz 1 sekundę od oczekiwania
			sprintf(tmp,"Pozostały czas do końca kroku: %02u:%02u:%02u.",program_->first().wartosc/3600,(program_->first().wartosc%3600)/60,((program_->first().wartosc)%3600)%60);
			
			wyswietlTekst(tmp,true);
			
			//std::cout<<"Pozostały czas: "<<std::setfill('0') <<std::setw(2)<<program_->first().wartosc/3600<<":"<<std::setfill('0')<<std::setw(2)<<(program_->first().wartosc%3600)/60<<":"<<std::setfill('0')<<std::setw(2)<<((program_->first().wartosc)%3600)%60<<std::endl;
		}
		else
		{
			wyswietlTekst("Krok oczekiwania zakończony.",true);
			program_->removeFirst();
		}
			
		return;
	}
	
	//Jeśli program ma ustawić temperaturę
	if(program_->first().stan==USTAW_TEMPERATURE)
	{
		char tmp[4];
		sprintf(tmp,"T%03i",program_->first().wartosc);
	
		if(rodzic_->wyslijRozkaz(tmp)==OK)	//Ustaw porządaną temperaturę
		{
			rodzic_->setZadanaTemperatura_(program_->first().wartosc);
			std::cerr<<tmp<<std::endl;
			wyswietlTekst("Ustawiono temperaturę docelową.",true);
		}
			
		//Usuń ten rozkaz z kolejki
		program_->removeFirst();
		
		return;
	}	
	
	//Jeśli program ma zapytać urządzenie o średnią temperaturę
	if(program_->first().stan==SREDNIA_TEMPERATURA)
	{
		if(rodzic_->wyslijRozkaz("A")==OK)	//Wyślij zapytanie o średnią temperaturę
		{
			std::cerr<<"A"<<std::endl;
			wyswietlTekst("Pozyskano średnią temperaturę.",true);
		}
			
		//Usuń ten rozkaz z kolejki
		program_->removeFirst();
		
		return;	
	}
	
	//Jeśli program ma zapytać urządzenie o temperaturę docelową
	if(program_->first().stan==TEMPERATURA_DOCELOWA)
	{
		if(rodzic_->wyslijRozkaz("D")==OK)	//Wyślij zapytanie o średnią temperaturę
		{
			std::cerr<<"D"<<std::endl;
			wyswietlTekst("Pozyskano temperaturę docelową.",true);
		}
		//Usuń ten rozkaz z kolejki
		program_->removeFirst();
		
		return;	
	}
	
	//Jeśli program ma zrestartować urządzenie
	if(program_->first().stan==RESTART)
	{
		rodzic_->zrestartujUrzadenie();
		wyswietlTekst("Zrestartowano urządzenie.",true);
		//Usuń ten rozkaz z kolejki
		program_->removeFirst();
		
		return;	
	}
	
	//Jeśli program nie ma ustalonego rozkazu
	if(program_->first().stan==BRAK_ROZKAZU)
	{
		wyswietlTekst("Pominięto pusty rozkaz.",true);
		//Usuń ten rozkaz z kolejki
		program_->removeFirst();
	}
}

void TrybProgramowalny::start(void)
{
	startStop_->setText("Stop");
	QObject::connect(startStop_, SIGNAL(clicked(bool)),this, SLOT(stop()));
	
	obsluzMaszyneStanow();
}

void TrybProgramowalny::stop(void)
{
	zegar_->stop();
	startStop_->setText("Start");
	
	wyswietlTekst("Użytkownik zatrzymał program.",true);
	
	QObject::connect(startStop_, SIGNAL(clicked(bool)),this, SLOT(start()));
}

int TrybProgramowalny::wczytajProgram(void)
{
    QString nazwaPliku = QFileDialog::getOpenFileName(this,tr("Wczytaj program"), "",tr("Pliki tekstowe (*.txt);;Wszystkie pliki (*)"));
    
    if (nazwaPliku.isEmpty())
    {
		QMessageBox::warning(this, tr("Brak nazwy pliku!"),"Nie podano nazwy pliku do wczytania.");
        return BRAK_NAZWY_PLIKU;<commit_msg>Teraz cały konsolowy 'spam' zależy od pola konsola_ klasy GlowneOkno (dotychczas korzystające z domyślnej wartości false wystąpienia metody wyswietlTekst z klasy TrybProgramowalny we wszystkich wystąpieniach korzystają z metody getKonsola()).<commit_after>//Nagłówki z katalogu QtCore
#include <QtCore/QFile>
#include <QtCore/QTextStream>
#include <QtCore/QString>

//Nagłówki z katalogu QtWidgets
#include <QtWidgets/QFileDialog>
#include <QtWidgets/QMessageBox>
#include <QtWidgets/QLabel>

//Standardowe nagłówki C/C++
#include <iostream>
#include <cstdint>

//Nagłówki z katalogu programu
#include "TrybProgramowalny.hpp"
#include "GlowneOkno.hpp"

TrybProgramowalny::TrybProgramowalny(GlowneOkno* rodzic=0):QWidget((QMainWindow*)rodzic)
{
	czasCalkowity_= new uint32_t(0);
	rodzic_=rodzic;
	rozmieszczacz_=new QVBoxLayout(this);
	rozmieszczaczeWierszowe_=new QHBoxLayout[2];
	
	rozmieszczacz_->addLayout(&(rozmieszczaczeWierszowe_[0]));
	rozmieszczacz_->addLayout(&(rozmieszczaczeWierszowe_[1]));
	
	czasWskaznik_=new QLabel("Można wczytać program użytkownika.",this);
	rozmieszczaczeWierszowe_[0].addWidget(czasWskaznik_);
	
	wczytaj_=new QPushButton("Wczytaj",this);
	rozmieszczaczeWierszowe_[1].addWidget(wczytaj_);
	startStop_=new QPushButton("Start",this);
	rozmieszczaczeWierszowe_[1].addWidget(startStop_);
	
	program_=new QVector <Rozkaz>;
	
	zegar_=new QTimer(this);
	
	QObject::connect(wczytaj_, SIGNAL(clicked(bool)),this, SLOT(wczytajProgram()));
	QObject::connect(startStop_, SIGNAL(clicked(bool)),this, SLOT(start()));
	QObject::connect(zegar_, SIGNAL(timeout()),this, SLOT(obsluzMaszyneStanow()));
}

TrybProgramowalny::~TrybProgramowalny()
{
	delete zegar_;
	delete wczytaj_;
	delete startStop_;
	delete czasWskaznik_;
	delete[] rozmieszczaczeWierszowe_;
	delete rozmieszczacz_;
	delete program_;
}

void TrybProgramowalny::obsluzMaszyneStanow(void)
{
	zegar_->start(1000);	//ponownie uruchom zegar
	
	if((*czasCalkowity_)>0)
		(*czasCalkowity_)--;
	
	//Jeśli nie ma rozkazów do wykonania
	if(program_->isEmpty())
	{
		/*Wyświetl komunikat o zakończeniu programu*/
		wyswietlTekst("Zakończono program użytkownika.",false,rodzic_->getKonsola());
		stop();
		return;
	}
	
	//Jeśli program ma czekać
	if(program_->first().stan==CZEKAJ)
	{
		if(program_->first().wartosc>1)
		{
			char tmp[64];
			program_->first().wartosc--;	//Odlicz 1 sekundę od oczekiwania
			sprintf(tmp,"Pozostały czas do końca kroku: %02u:%02u:%02u.",program_->first().wartosc/3600,(program_->first().wartosc%3600)/60,((program_->first().wartosc)%3600)%60);
			
			wyswietlTekst(tmp,true);
			
			//std::cout<<"Pozostały czas: "<<std::setfill('0') <<std::setw(2)<<program_->first().wartosc/3600<<":"<<std::setfill('0')<<std::setw(2)<<(program_->first().wartosc%3600)/60<<":"<<std::setfill('0')<<std::setw(2)<<((program_->first().wartosc)%3600)%60<<std::endl;
		}
		else
		{
			wyswietlTekst("Krok oczekiwania zakończony.",true,rodzic_->getKonsola());
			program_->removeFirst();
		}
			
		return;
	}
	
	//Jeśli program ma ustawić temperaturę
	if(program_->first().stan==USTAW_TEMPERATURE)
	{
		char tmp[4];
		sprintf(tmp,"T%03i",program_->first().wartosc);
	
		if(rodzic_->wyslijRozkaz(tmp)==OK)	//Ustaw porządaną temperaturę
		{
			rodzic_->setZadanaTemperatura_(program_->first().wartosc);
			std::cerr<<tmp<<std::endl;
			wyswietlTekst("Ustawiono temperaturę docelową.",true,rodzic_->getKonsola());
		}
			
		//Usuń ten rozkaz z kolejki
		program_->removeFirst();
		
		return;
	}	
	
	//Jeśli program ma zapytać urządzenie o średnią temperaturę
	if(program_->first().stan==SREDNIA_TEMPERATURA)
	{
		if(rodzic_->wyslijRozkaz("A")==OK)	//Wyślij zapytanie o średnią temperaturę
		{
			std::cerr<<"A"<<std::endl;
			wyswietlTekst("Pozyskano średnią temperaturę.",true,rodzic_->getKonsola());
		}
			
		//Usuń ten rozkaz z kolejki
		program_->removeFirst();
		
		return;	
	}
	
	//Jeśli program ma zapytać urządzenie o temperaturę docelową
	if(program_->first().stan==TEMPERATURA_DOCELOWA)
	{
		if(rodzic_->wyslijRozkaz("D")==OK)	//Wyślij zapytanie o średnią temperaturę
		{
			std::cerr<<"D"<<std::endl;
			wyswietlTekst("Pozyskano temperaturę docelową.",true,rodzic_->getKonsola());
		}
		//Usuń ten rozkaz z kolejki
		program_->removeFirst();
		
		return;	
	}
	
	//Jeśli program ma zrestartować urządzenie
	if(program_->first().stan==RESTART)
	{
		rodzic_->zrestartujUrzadenie();
		wyswietlTekst("Zrestartowano urządzenie.",true,rodzic_->getKonsola());
		//Usuń ten rozkaz z kolejki
		program_->removeFirst();
		
		return;	
	}
	
	//Jeśli program nie ma ustalonego rozkazu
	if(program_->first().stan==BRAK_ROZKAZU)
	{
		wyswietlTekst("Pominięto pusty rozkaz.",true,rodzic_->getKonsola());
		//Usuń ten rozkaz z kolejki
		program_->removeFirst();
	}
}

void TrybProgramowalny::start(void)
{
	startStop_->setText("Stop");
	QObject::connect(startStop_, SIGNAL(clicked(bool)),this, SLOT(stop()));
	
	obsluzMaszyneStanow();
}

void TrybProgramowalny::stop(void)
{
	zegar_->stop();
	startStop_->setText("Start");
	
	wyswietlTekst("Użytkownik zatrzymał program.",true,rodzic_->getKonsola());
	
	QObject::connect(startStop_, SIGNAL(clicked(bool)),this, SLOT(start()));
}

int TrybProgramowalny::wczytajProgram(void)
{
    QString nazwaPliku = QFileDialog::getOpenFileName(this,tr("Wczytaj program"), "",tr("Pliki tekstowe (*.txt);;Wszystkie pliki (*)"));
    
    if (nazwaPliku.isEmpty())
    {
		QMessageBox::warning(this, tr("Brak nazwy pliku!"),"Nie podano nazwy pliku do wczytania.");
        return BRAK_NAZWY_PLIKU;
{'fraction_non_alphanumeric': 0.1602678992547873, 'fraction_numerical': 0.012451655504197717, 'mean_word_length': 5.893368010403121, 'pattern_counts': {'":': 4, '<': 97, '<?xml version=': 0, '>': 101, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '7181168', 'n_tokens_mistral': 4745, 'n_tokens_neox': 4547, 'n_words': 613}