From 223334b0ec00e3df0ba1ec26ad70530facc1470b Mon Sep 17 00:00:00 2001
From: "m.marn" <matic.marn@cosylab.com>
Date: Fri, 17 Mar 2023 12:03:18 +0100
Subject: [PATCH] Address the warnings in diagnostic app. Replaced some tabs
 with spaces. #65

---
 .../diagnostictoolmainview.cpp                | 595 +++++++++---------
 .../diagnostictoolmainview.h                  |   4 +-
 .../silecs-diagnostic/displayarraydialog.cpp  |  12 +-
 .../silecs-diagnostic/displayarraydialog.h    |   2 +-
 .../src/silecs-diagnostic/silecsmodule.cpp    |  14 +-
 .../src/silecs-diagnostic/silecsmodule.h      |   2 +-
 .../src/silecs-diagnostic/stderrredirect.cpp  |  11 +-
 7 files changed, 324 insertions(+), 316 deletions(-)

diff --git a/silecs-diagnostic-cpp/src/silecs-diagnostic/diagnostictoolmainview.cpp b/silecs-diagnostic-cpp/src/silecs-diagnostic/diagnostictoolmainview.cpp
index 54bf594..e5bab31 100755
--- a/silecs-diagnostic-cpp/src/silecs-diagnostic/diagnostictoolmainview.cpp
+++ b/silecs-diagnostic-cpp/src/silecs-diagnostic/diagnostictoolmainview.cpp
@@ -12,7 +12,7 @@ Contributors:
 
 
 #include <QtCore/QDebug>
-#include <QtCore/QTime>
+#include <QtCore/QElapsedTimer>
 #include <QtCore/QTimer>
 #include <QtWidgets/QMessageBox>
 #include <QtWidgets/QFileDialog>
@@ -81,40 +81,40 @@ std::string diagnosticToolMainView::generateLogTopics()
 
 void diagnosticToolMainView::resetGUI()
 {
-	try
-	{
-		//Stop periodic receiving if any
-		if(ui->periodicReceiveButton->isChecked()==true)
-		{
-			ui->periodicReceiveButton->setChecked(false);
-			Utils::logInfo(ui->console,"Monitoring was stopped due to cluster closure.");
-		}
-		ui->sendButton->setEnabled(false);
-		ui->receiveButton->setEnabled(false);
-		ui->periodicReceiveButton->setEnabled(false);
-		ui->copyButton->setEnabled(false);
-		//Clear the tree
-		ui->treeWidget->clear();
-
-		ui->sendComboBox->clear();
-		ui->receiveComboBox->clear();
-		ui->copyComboBox->clear();
-		// disable connect and disconnect
-		ui->connectButton->setEnabled(false);
-		ui->disconnectButton->setEnabled(false);
-
-		if(mysilecs!=NULL)
-		{
-		    delete mysilecs;
-		    mysilecs = NULL;
-		}
-
-		if(redirector!=NULL)
-		{
-		    delete redirector;
-		    redirector = NULL;
-		}
-	}
+    try
+    {
+        //Stop periodic receiving if any
+        if(ui->periodicReceiveButton->isChecked()==true)
+        {
+            ui->periodicReceiveButton->setChecked(false);
+            Utils::logInfo(ui->console,"Monitoring was stopped due to cluster closure.");
+        }
+        ui->sendButton->setEnabled(false);
+        ui->receiveButton->setEnabled(false);
+        ui->periodicReceiveButton->setEnabled(false);
+        ui->copyButton->setEnabled(false);
+        //Clear the tree
+        ui->treeWidget->clear();
+
+        ui->sendComboBox->clear();
+        ui->receiveComboBox->clear();
+        ui->copyComboBox->clear();
+        // disable connect and disconnect
+        ui->connectButton->setEnabled(false);
+        ui->disconnectButton->setEnabled(false);
+
+        if(mysilecs!=NULL)
+        {
+            delete mysilecs;
+            mysilecs = NULL;
+        }
+
+        if(redirector!=NULL)
+        {
+            delete redirector;
+            redirector = NULL;
+        }
+    }
     catch(std::string *str)
     {
         Utils::logError(ui->console,*str);
@@ -123,16 +123,16 @@ void diagnosticToolMainView::resetGUI()
     {
         Utils::logError(ui->console,ex.what());
     }
-	catch(...)
-	{
-		Utils::logError(ui->console,"Unexpected error while reseting GUI. Please notify SILECS support");
-	}
+    catch(...)
+    {
+        Utils::logError(ui->console,"Unexpected error while reseting GUI. Please notify SILECS support");
+    }
 }
 
 
 void diagnosticToolMainView::loadFiles()
 {
-	resetGUI();
+    resetGUI();
     try
     {
         this->redirector = new StdErrRedirect(ui->console);
@@ -218,7 +218,7 @@ void diagnosticToolMainView::loadFiles()
 
 void diagnosticToolMainView::on_connectButton_clicked()
 {
-	ui->console->clear();
+    ui->console->clear();
 
     // Connect button
 
@@ -228,42 +228,42 @@ void diagnosticToolMainView::on_connectButton_clicked()
     // Cast the linked object PLC type
     Silecs::PLC* plc = (Silecs::PLC*)(currentItem->getLinkedObject());
 
-	try
-	{
-		plc->connect(Silecs::MASTER_SYNCHRO,true,ui->compareChecksums->isChecked());
-		if(!plc->isConnected())
-		{
-			Utils::logError(ui->console,"Connection to PLC failed.");
-			return;
-		}
-		mysilecs->updatePLCItem(currentItem,false);
-		if(!plc->isConnected())
-		{
-			Utils::logError(ui->console,"Updating PLC-items failed.");
-			return;
-		}
-
-		// disable connect button
-		ui->connectButton->setEnabled(false);
-		ui->disconnectButton->setEnabled(true);
-
-		// enable send and receive
-		ui->sendBox->setEnabled(true);
-		ui->receiveBox->setEnabled(true);
-		ui->copyBox->setEnabled(true);
-
-		//refresh console
-		Utils::displayPLCInformation(plc,ui->InformationMessage);
-
-		//highlight PLC background in green
-		currentItem->setBackgroundColor(0,Qt::green);
-
-		//show the run-state of the PLC
-		mysilecs->updatePLCRunState(currentItem);
+    try
+    {
+        plc->connect(Silecs::MASTER_SYNCHRO,true,ui->compareChecksums->isChecked());
+        if(!plc->isConnected())
+        {
+            Utils::logError(ui->console,"Connection to PLC failed.");
+            return;
+        }
+        mysilecs->updatePLCItem(currentItem,false);
+        if(!plc->isConnected())
+        {
+            Utils::logError(ui->console,"Updating PLC-items failed.");
+            return;
+        }
 
-		// Increment number of connected PLC
-		mysilecs->counterConnectedPLC++;
-	}
+        // disable connect button
+        ui->connectButton->setEnabled(false);
+        ui->disconnectButton->setEnabled(true);
+
+        // enable send and receive
+        ui->sendBox->setEnabled(true);
+        ui->receiveBox->setEnabled(true);
+        ui->copyBox->setEnabled(true);
+
+        //refresh console
+        Utils::displayPLCInformation(plc,ui->InformationMessage);
+
+        //highlight PLC background in green
+        currentItem->setBackground(0, Qt::green);
+
+        //show the run-state of the PLC
+        mysilecs->updatePLCRunState(currentItem);
+
+        // Increment number of connected PLC
+        mysilecs->counterConnectedPLC++;
+    }
     catch(std::string *str)
     {
         Utils::logError(ui->console,*str);
@@ -311,7 +311,7 @@ void diagnosticToolMainView::on_disconnectButton_clicked()
         Utils::displayPLCInformation(plc,ui->InformationMessage);
 
         // remove green background
-        ui->treeWidget->currentItem()->setBackgroundColor(0,Qt::white);
+        ui->treeWidget->currentItem()->setBackground(0, Qt::white);
 
         // Decrement number of connected PLC
         mysilecs->counterConnectedPLC--;
@@ -341,7 +341,7 @@ void diagnosticToolMainView::on_disconnectButton_clicked()
 
 void diagnosticToolMainView::on_treeWidget_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous)
 {
-	ui->console->clear();
+    ui->console->clear();
     (void)current; // to suppress unused warning
     (void)previous; // to suppress unused warning
     try
@@ -354,87 +354,87 @@ void diagnosticToolMainView::on_treeWidget_currentItemChanged(QTreeWidgetItem *c
             return;
         }
 
-		Item *currentItem = dynamic_cast<Item*>(current);
-
-		/*
-		 * If the selected item is a Cluster
-		 */
-		if(!currentItem->whatsThis(0).compare(QString::fromStdString(CLUSTER_TYPE)))
-		{
-			qDebug() << "Cluster selected";
-			Utils::displayClusterInformation(((Silecs::Cluster*)(currentItem->getLinkedObject())),ui->InformationMessage);
-		}
-
-		/*
-		 * If the selected item is a PLC
-		 */
-		if(!currentItem->whatsThis(0).compare(QString::fromStdString(PLC_TYPE)))
-		{
-			qDebug() << "Plc selected";
-			Utils::displayPLCInformation(((Silecs::PLC*)(currentItem->getLinkedObject())),ui->InformationMessage);
-
-			bool connected = ((Silecs::PLC*)(currentItem->getLinkedObject()))->isConnected();
-			ui->connectButton->setEnabled(!connected);
-			ui->disconnectButton->setEnabled(connected);
-		}
-		else
-		{
-			ui->connectButton->setEnabled(false);
-			ui->disconnectButton->setEnabled(false);
-		}
-
-		/*
-		 * If the selected item is a device
-		 */
-		if(!currentItem->whatsThis(0).compare(QString::fromStdString(DEVICE_TYPE)))
-		{
-			qDebug() << "Device selected";
-			Silecs::Device* device = (Silecs::Device*)(currentItem->getLinkedObject());
-			Utils::displayDeviceInformation(device,ui->InformationMessage);
-
-			bool connected = ((Silecs::PLC*)dynamic_cast<Item*>(currentItem->parent())->getLinkedObject())->isConnected();
-
-			ui->sendBox->setEnabled(connected);
-			ui->receiveBox->setEnabled(connected);
-			ui->copyBox->setEnabled(connected);
-			ui->sendButton->setEnabled(connected);
-			ui->receiveButton->setEnabled(connected);
-			ui->copyButton->setEnabled(connected);
-			ui->periodicReceiveButton->setEnabled(connected);
-		}
-		else
-		{
-			ui->sendBox->setEnabled(false);
-			ui->receiveBox->setEnabled(false);
-			ui->copyBox->setEnabled(false);
-			ui->sendButton->setEnabled(false);
-			ui->receiveButton->setEnabled(false);
-			ui->copyButton->setEnabled(false);
-			ui->periodicReceiveButton->setEnabled(false);
-		}
-
-		/*
-		 * If the selected item is a register
-		 */
-		if(!currentItem->whatsThis(0).compare(QString::fromStdString(REGISTER_TYPE)))
-		{
-			qDebug() << "Register selected";
-			Utils::displayRegisterInformation(((Silecs::Register*)(currentItem->getLinkedObject())),ui->InformationMessage);
-
-			//bool connected = ((Silecs::PLC*)dynamic_cast<Item*>(currentItem->parent()->parent())->getLinkedObject())->isConnected();
-			Utils::displayRegisterValue((Silecs::Register*)(currentItem->getLinkedObject()),
-										ui->binValueLabel,
-										ui->HexValueLabel,
-										ui->DecValueLabel,
-										ui->asciiValueLabel);
-		}
-		else
-		{
-			ui->binValueLabel->setText("--Not relevant--");
-			ui->HexValueLabel->setText("--Not relevant--");
-			ui->DecValueLabel->setText("--Not relevant--");
-			ui->asciiValueLabel->setText("--Not relevant--");
-		}
+        Item *currentItem = dynamic_cast<Item*>(current);
+
+        /*
+            * If the selected item is a Cluster
+            */
+        if(!currentItem->whatsThis(0).compare(QString::fromStdString(CLUSTER_TYPE)))
+        {
+            qDebug() << "Cluster selected";
+            Utils::displayClusterInformation(((Silecs::Cluster*)(currentItem->getLinkedObject())),ui->InformationMessage);
+        }
+
+        /*
+            * If the selected item is a PLC
+            */
+        if(!currentItem->whatsThis(0).compare(QString::fromStdString(PLC_TYPE)))
+        {
+            qDebug() << "Plc selected";
+            Utils::displayPLCInformation(((Silecs::PLC*)(currentItem->getLinkedObject())),ui->InformationMessage);
+
+            bool connected = ((Silecs::PLC*)(currentItem->getLinkedObject()))->isConnected();
+            ui->connectButton->setEnabled(!connected);
+            ui->disconnectButton->setEnabled(connected);
+        }
+        else
+        {
+            ui->connectButton->setEnabled(false);
+            ui->disconnectButton->setEnabled(false);
+        }
+
+        /*
+            * If the selected item is a device
+            */
+        if(!currentItem->whatsThis(0).compare(QString::fromStdString(DEVICE_TYPE)))
+        {
+            qDebug() << "Device selected";
+            Silecs::Device* device = (Silecs::Device*)(currentItem->getLinkedObject());
+            Utils::displayDeviceInformation(device,ui->InformationMessage);
+
+            bool connected = ((Silecs::PLC*)dynamic_cast<Item*>(currentItem->parent())->getLinkedObject())->isConnected();
+
+            ui->sendBox->setEnabled(connected);
+            ui->receiveBox->setEnabled(connected);
+            ui->copyBox->setEnabled(connected);
+            ui->sendButton->setEnabled(connected);
+            ui->receiveButton->setEnabled(connected);
+            ui->copyButton->setEnabled(connected);
+            ui->periodicReceiveButton->setEnabled(connected);
+        }
+        else
+        {
+            ui->sendBox->setEnabled(false);
+            ui->receiveBox->setEnabled(false);
+            ui->copyBox->setEnabled(false);
+            ui->sendButton->setEnabled(false);
+            ui->receiveButton->setEnabled(false);
+            ui->copyButton->setEnabled(false);
+            ui->periodicReceiveButton->setEnabled(false);
+        }
+
+        /*
+            * If the selected item is a register
+            */
+        if(!currentItem->whatsThis(0).compare(QString::fromStdString(REGISTER_TYPE)))
+        {
+            qDebug() << "Register selected";
+            Utils::displayRegisterInformation(((Silecs::Register*)(currentItem->getLinkedObject())),ui->InformationMessage);
+
+            //bool connected = ((Silecs::PLC*)dynamic_cast<Item*>(currentItem->parent()->parent())->getLinkedObject())->isConnected();
+            Utils::displayRegisterValue((Silecs::Register*)(currentItem->getLinkedObject()),
+                                        ui->binValueLabel,
+                                        ui->HexValueLabel,
+                                        ui->DecValueLabel,
+                                        ui->asciiValueLabel);
+        }
+        else
+        {
+            ui->binValueLabel->setText("--Not relevant--");
+            ui->HexValueLabel->setText("--Not relevant--");
+            ui->DecValueLabel->setText("--Not relevant--");
+            ui->asciiValueLabel->setText("--Not relevant--");
+        }
         // Automaticaly resize the coloumn with the item name
         ui->treeWidget->resizeColumnToContents(0);
     }
@@ -454,45 +454,45 @@ void diagnosticToolMainView::on_treeWidget_currentItemChanged(QTreeWidgetItem *c
 
 std::vector<QString> diagnosticToolMainView::openArrayDialogBase(Silecs::Register* reg, std::vector<QString> dataVector, bool localData)
 {
-	DisplayArrayDialog arrayDialog;
-	arrayDialog.setDataVector(dataVector,localData,reg->getDimension2());
-	arrayDialog.setWindowTitle("Array View");
-	arrayDialog.setModal(true);
-	if(arrayDialog.exec()==1) // ok pressed
-	{
-		return arrayDialog.getDataVector();
-	}
-	return dataVector;
+    DisplayArrayDialog arrayDialog;
+    arrayDialog.setDataVector(dataVector,localData,reg->getDimension2());
+    arrayDialog.setWindowTitle("Array View");
+    arrayDialog.setModal(true);
+    if(arrayDialog.exec()==1) // ok pressed
+    {
+        return arrayDialog.getDataVector();
+    }
+    return dataVector;
 }
 
 std::vector<QString> diagnosticToolMainView::open1DArrayDialog(Silecs::Register* reg, bool localData)
 {
-	std::vector<QString> dataVector;
-	for(unsigned long i=0;i<reg->getDimension1();i++)
-	{
-		if( localData )
-			dataVector.push_back(QString::fromStdString(reg->getOutputValAsString(i)));
-		else
-			dataVector.push_back(QString::fromStdString(reg->getInputValAsString(i)));
-	}
+    std::vector<QString> dataVector;
+    for(unsigned long i=0;i<reg->getDimension1();i++)
+    {
+        if( localData )
+            dataVector.push_back(QString::fromStdString(reg->getOutputValAsString(i)));
+        else
+            dataVector.push_back(QString::fromStdString(reg->getInputValAsString(i)));
+    }
 
-	return openArrayDialogBase(reg, dataVector, localData);
+    return openArrayDialogBase(reg, dataVector, localData);
 }
 
 std::vector<QString> diagnosticToolMainView::open2DArrayDialog(Silecs::Register* reg, bool localData)
 {
-	std::vector<QString> dataVector;
-	for(unsigned long i=0; i<reg->getDimension1(); i++)
-	{
-		for(unsigned long j=0; j<reg->getDimension2(); j++)
-		{
-			if( localData )
-				dataVector.push_back(QString::fromStdString(reg->getOutputValAsString(i,j)));
-			else
-				dataVector.push_back(QString::fromStdString(reg->getInputValAsString(i,j)));
-		}
-	}
-	return openArrayDialogBase(reg, dataVector, localData);
+    std::vector<QString> dataVector;
+    for(unsigned long i=0; i<reg->getDimension1(); i++)
+    {
+        for(unsigned long j=0; j<reg->getDimension2(); j++)
+        {
+            if( localData )
+                dataVector.push_back(QString::fromStdString(reg->getOutputValAsString(i,j)));
+            else
+                dataVector.push_back(QString::fromStdString(reg->getInputValAsString(i,j)));
+        }
+    }
+    return openArrayDialogBase(reg, dataVector, localData);
 }
 
 void diagnosticToolMainView::markItemNotEdiable(QTreeWidgetItem *item)
@@ -503,61 +503,61 @@ void diagnosticToolMainView::markItemNotEdiable(QTreeWidgetItem *item)
 
 void diagnosticToolMainView::on_treeWidget_doubleClicked(const QModelIndex &index)
 {
-	ui->console->clear();
+    ui->console->clear();
     (void)index; // to suppress unused warning
     try
     {
-    	QTreeWidgetItem *itm = ui->treeWidget->currentItem();
-    	if( itm->whatsThis(0).toStdString().compare(REGISTER_TYPE) != 0 )
-    	{
-    		markItemNotEdiable(itm);
+        QTreeWidgetItem *itm = ui->treeWidget->currentItem();
+        if( itm->whatsThis(0).toStdString().compare(REGISTER_TYPE) != 0 )
+        {
+            markItemNotEdiable(itm);
             return;
-    	}
+        }
         Item *registerItem = dynamic_cast<Item*>(itm);
         Silecs::Register* reg = (Silecs::Register*)registerItem->getLinkedObject();
 
         switch(ui->treeWidget->currentColumn())
         {
-			case 2:// double click performed on 2th column (PLC value) --> open non-editable ArrayDialog for arrays
-				if(reg->getDimension2()<=1)  // scalar or 1d array (noting happens for scalar)
-				{
-					if(reg->getDimension1()<=1) //scalar
-					{
-						return;
-					}
-					open1DArrayDialog(reg,false);
-				}
-				else    // 2d array
-				{
-					open2DArrayDialog(reg,false);
-				}
-				markItemNotEdiable(itm);
-				return;
-			case 3:// double click performed on 3th column (local value)
-				if(!reg->isWritable() )// is READ only for silecs or is wrong column
-				{
-					markItemNotEdiable(itm);
-					return;
-				}
-				if(reg->getDimension2()<=1)  // scalar or 1d array
-				{
-					if(reg->getDimension1()<=1) //scalar
-					{
-			            itm->setFlags(Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsDragEnabled | Qt::ItemIsEditable);
-			        	return;
-					}
-					std::vector<QString> dataVector = open1DArrayDialog(reg,true);
-					mysilecs->setArrayRegValue(registerItem,&dataVector);
-				}
-				else    // 2d array
-				{
-					std::vector<QString> dataVector= open2DArrayDialog(reg,true);
-					mysilecs->setArrayRegValue(registerItem,&dataVector);
-				}
-				return;
-			default: // other columns are not editable
-				markItemNotEdiable(itm);
-				return;
+            case 2:// double click performed on 2th column (PLC value) --> open non-editable ArrayDialog for arrays
+                if(reg->getDimension2()<=1)  // scalar or 1d array (noting happens for scalar)
+                {
+                    if(reg->getDimension1()<=1) //scalar
+                    {
+                        return;
+                    }
+                    open1DArrayDialog(reg,false);
+                }
+                else    // 2d array
+                {
+                    open2DArrayDialog(reg,false);
+                }
+                markItemNotEdiable(itm);
+                return;
+            case 3:// double click performed on 3th column (local value)
+                if(!reg->isWritable() )// is READ only for silecs or is wrong column
+                {
+                    markItemNotEdiable(itm);
+                    return;
+                }
+                if(reg->getDimension2()<=1)  // scalar or 1d array
+                {
+                    if(reg->getDimension1()<=1) //scalar
+                    {
+                        itm->setFlags(Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsDragEnabled | Qt::ItemIsEditable);
+                        return;
+                    }
+                    std::vector<QString> dataVector = open1DArrayDialog(reg,true);
+                    mysilecs->setArrayRegValue(registerItem,&dataVector);
+                }
+                else    // 2d array
+                {
+                    std::vector<QString> dataVector= open2DArrayDialog(reg,true);
+                    mysilecs->setArrayRegValue(registerItem,&dataVector);
+                }
+                return;
+            default: // other columns are not editable
+                markItemNotEdiable(itm);
+                return;
         }
     }
     catch(std::string *str)
@@ -604,7 +604,7 @@ void diagnosticToolMainView::on_sendButton_clicked()
 			}
 			try{
 				//send and mesure sending time
-				QTime mytimer;
+				QElapsedTimer mytimer;
 				mytimer.start();
 				cluster->send(ui->sendComboBox->currentText().toStdString());
 				logCommunicationSuccess(mytimer.elapsed());
@@ -630,7 +630,7 @@ void diagnosticToolMainView::on_sendButton_clicked()
                 mysilecs->setScalarDataInDeviceFromItem((Item*)currentItem->child(i),ui->sendComboBox->currentText().toStdString());
             try{
                 //send and mesure sending time
-                QTime mytimer;
+                QElapsedTimer mytimer;
                 mytimer.start();
                 int ret = plc->send(ui->sendComboBox->currentText().toStdString());
                 if(ret != 0)
@@ -657,7 +657,7 @@ void diagnosticToolMainView::on_sendButton_clicked()
                 Silecs::Device* device = (Silecs::Device*)(currentItem->getLinkedObject());
 
                 //send and mesure sending time
-                QTime mytimer;
+                QElapsedTimer mytimer;
                 mytimer.start();
                 Utils::logInfo(ui->console,"Sending data to device: '" + device->getLabel() + "', block: '" + ui->sendComboBox->currentText().toStdString() + "'");
                 int ret = device->send(ui->sendComboBox->currentText().toStdString());
@@ -723,64 +723,65 @@ void diagnosticToolMainView::on_receiveButton_clicked()
 
 void diagnosticToolMainView::on_classNameComboBox_currentIndexChanged(const QString &arg1)
 {
-	ui->console->clear();
-	if( !deployFile.empty() )
-	{
-		ui->DesignName->setText("");
-		designName = ui->classNameComboBox->currentText().toStdString();
-		loadFiles();
-	}
-	return;
+    Q_UNUSED(arg1);
+    ui->console->clear();
+    if( !deployFile.empty() )
+    {
+        ui->DesignName->setText("");
+        designName = ui->classNameComboBox->currentText().toStdString();
+        loadFiles();
+    }
+    return;
 }
 
 void diagnosticToolMainView::on_loadDeployButton_clicked()
 {
-	ui->console->clear();
-	deployFile = QFileDialog::getOpenFileName(this, tr("Deploy to Open"), "" ,tr("Silecs Deploy Files (*.silecsdeploy)")).toStdString();
-	if( !deployFile.empty() )
-	{
-		ui->DeployName->setText(QString::fromStdString(deployFile));
-		ui->DesignName->setText("pick a design");
-		fillClassNameComboBox();
-	}
-	return;
+    ui->console->clear();
+    deployFile = QFileDialog::getOpenFileName(this, tr("Deploy to Open"), "" ,tr("Silecs Deploy Files (*.silecsdeploy)")).toStdString();
+    if( !deployFile.empty() )
+    {
+        ui->DeployName->setText(QString::fromStdString(deployFile));
+        ui->DesignName->setText("pick a design");
+        fillClassNameComboBox();
+    }
+    return;
 }
 
 void diagnosticToolMainView::setDeployFile(std::string file)
 {
-	deployFile = file;
-	ui->DeployName->setText(QString::fromStdString(deployFile));
-	ui->DesignName->setText("pick a design");
-	fillClassNameComboBox();
+    deployFile = file;
+    ui->DeployName->setText(QString::fromStdString(deployFile));
+    ui->DesignName->setText("pick a design");
+    fillClassNameComboBox();
 }
 
 void diagnosticToolMainView::fillClassNameComboBox()
 {
-	Utils::logInfo(ui->console,"Loading deploy file: " + deployFile);
-	XMLParser parserDeploy(deployFile,true);
-	boost::ptr_vector<ElementXML> classNodes;
-	try
-	{
-		classNodes = parserDeploy.getElementsFromXPath_throwIfEmpty("/SILECS-Deploy/SilecsDesign");
-	}
-	catch(const Silecs::SilecsException& ex2)
-	{
-		Utils::logError(ui->console,"No classes found for this Deploy: " + deployFile + ". Exception: " + ex2.what());
-		return;
-	}
+    Utils::logInfo(ui->console,"Loading deploy file: " + deployFile);
+    XMLParser parserDeploy(deployFile,true);
+    boost::ptr_vector<ElementXML> classNodes;
+    try
+    {
+        classNodes = parserDeploy.getElementsFromXPath_throwIfEmpty("/SILECS-Deploy/SilecsDesign");
+    }
+    catch(const Silecs::SilecsException& ex2)
+    {
+        Utils::logError(ui->console,"No classes found for this Deploy: " + deployFile + ". Exception: " + ex2.what());
+        return;
+    }
 
-	QStringList list;
-	boost::ptr_vector<ElementXML>::const_iterator classIter;
-	for(classIter = classNodes.begin(); classIter != classNodes.end(); classIter++)
-	{
-		QString className(classIter->getAttribute("silecs-design-name").c_str());
-		if(!list.contains(className))
-			list += className;
-	}
-	QString headerName(HEADER_NAME.c_str());
-	list += headerName;
-	ui->classNameComboBox->clear();
-	ui->classNameComboBox->addItems(list);
+    QStringList list;
+    boost::ptr_vector<ElementXML>::const_iterator classIter;
+    for(classIter = classNodes.begin(); classIter != classNodes.end(); classIter++)
+    {
+        QString className(classIter->getAttribute("silecs-design-name").c_str());
+        if(!list.contains(className))
+            list += className;
+    }
+    QString headerName(HEADER_NAME.c_str());
+    list += headerName;
+    ui->classNameComboBox->clear();
+    ui->classNameComboBox->addItems(list);
 }
 
 void diagnosticToolMainView::ctxMenu(const QPoint &pos)
@@ -802,18 +803,18 @@ void diagnosticToolMainView::on_treeWidget_itemExpanded(QTreeWidgetItem *item)
     ui->treeWidget->resizeColumnToContents(0);
 }
 
-void diagnosticToolMainView::logBlockReceived(std::string blockName, int elapsedTime)
+void diagnosticToolMainView::logBlockReceived(std::string blockName, qint64 elapsedTime)
 {
-	std::ostringstream message;
-	message << "Block '" << blockName << "' received successfully from the device in " <<  elapsedTime << " milliseconds";
-	Utils::logInfo(ui->console,message.str().c_str());
+    std::ostringstream message;
+    message << "Block '" << blockName << "' received successfully from the device in " <<  elapsedTime << " milliseconds";
+    Utils::logInfo(ui->console,message.str().c_str());
 }
 
-void diagnosticToolMainView::logCommunicationSuccess(int elapsedTime)
+void diagnosticToolMainView::logCommunicationSuccess(qint64 elapsedTime)
 {
-	std::ostringstream message;
-	message << "PLC communication successful. Elapsed time: " <<  elapsedTime << " milliseconds";
-	Utils::logInfo(ui->console,message.str().c_str());
+    std::ostringstream message;
+    message << "PLC communication successful. Elapsed time: " <<  elapsedTime << " milliseconds";
+    Utils::logInfo(ui->console,message.str().c_str());
 }
 
 
@@ -823,11 +824,11 @@ void diagnosticToolMainView::receiveDevice(std::string blockName, Item* deviceIt
     qDebug() << "try to receive " << QString::fromStdString(blockName);
     try{
         //receive device and mesure sending time
-        QTime mytimer;
+        QElapsedTimer mytimer;
         mytimer.start();
         Utils::logInfo(ui->console,"Receiving data from device: '" + device->getLabel() + "', block: '" + blockName + "'");
         int ret = device->recv(blockName);
-        int elapsedTime = mytimer.elapsed();
+        qint64 elapsedTime = mytimer.elapsed();
         if(ret != 0)
         {
         	Utils::logError(ui->console,"Error while receiving the block to the selected device");
@@ -856,11 +857,11 @@ void diagnosticToolMainView::periodicReceiveDevice()
     qDebug()<< "try to receive "<< QString::fromStdString(blockNameForPeriodicReceive);
     try{
         //receive device and mesure sending time
-        QTime mytimer;
+        QElapsedTimer mytimer;
         mytimer.start();
         device->recv(blockNameForPeriodicReceive);
-        int elapsedTime = mytimer.elapsed();
-        logBlockReceived(blockNameForPeriodicReceive,elapsedTime);
+        qint64 elapsedTime = mytimer.elapsed();
+        logBlockReceived(blockNameForPeriodicReceive, elapsedTime);
     }
     catch(std::string *str)
     {
@@ -882,7 +883,7 @@ void diagnosticToolMainView::periodicReceiveDevice()
 
 void diagnosticToolMainView::on_periodicReceiveButton_toggled(bool checked)
 {
-	ui->console->clear();
+    ui->console->clear();
     if(checked)
     {
         // receive periodic Button
diff --git a/silecs-diagnostic-cpp/src/silecs-diagnostic/diagnostictoolmainview.h b/silecs-diagnostic-cpp/src/silecs-diagnostic/diagnostictoolmainview.h
index cc150de..a436475 100755
--- a/silecs-diagnostic-cpp/src/silecs-diagnostic/diagnostictoolmainview.h
+++ b/silecs-diagnostic-cpp/src/silecs-diagnostic/diagnostictoolmainview.h
@@ -96,8 +96,8 @@ private:
 
     void fillClassNameComboBox();
 
-    void logBlockReceived(std::string blockName, int elapsedTime);
-    void logCommunicationSuccess(int elapsedTime);
+    void logBlockReceived(std::string blockName, qint64 elapsedTime);
+    void logCommunicationSuccess(qint64 elapsedTime);
 
     std::vector<QString> openArrayDialogBase(Silecs::Register* reg, std::vector<QString> dataVector, bool localData);
     std::vector<QString> open1DArrayDialog(Silecs::Register* reg, bool localData);
diff --git a/silecs-diagnostic-cpp/src/silecs-diagnostic/displayarraydialog.cpp b/silecs-diagnostic-cpp/src/silecs-diagnostic/displayarraydialog.cpp
index f1e2dfb..9addd6d 100755
--- a/silecs-diagnostic-cpp/src/silecs-diagnostic/displayarraydialog.cpp
+++ b/silecs-diagnostic-cpp/src/silecs-diagnostic/displayarraydialog.cpp
@@ -29,14 +29,14 @@ DisplayArrayDialog::~DisplayArrayDialog()
     delete ui;
 }
 
-void DisplayArrayDialog::setDataVector(std::vector<QString> dataVector, bool editable, unsigned long dim2)
+void DisplayArrayDialog::setDataVector(std::vector<QString> dataVector, bool editable, int dim2)
 {
     this->dataVector = dataVector;
 
     // display informations
     if(dim2 <= 1)   // 1d array
     {
-        int numberOfValues = this->dataVector.size();
+        int numberOfValues = static_cast<int>(this->dataVector.size());
         ui->tableWidget->setColumnCount(1);
         ui->tableWidget->setRowCount(numberOfValues);
 
@@ -52,13 +52,13 @@ void DisplayArrayDialog::setDataVector(std::vector<QString> dataVector, bool edi
     }
     else    // 2d array
     {
-        unsigned long dim1 = (this->dataVector.size())/dim2;
+        int dim1 = static_cast<int>(this->dataVector.size()) / dim2;
         ui->tableWidget->setColumnCount(dim2);
         ui->tableWidget->setRowCount(dim1);
 
-        for(unsigned long i=0; i<dim1; i++)
+        for(int i=0; i<dim1; i++)
         {
-            for(unsigned long j=0; j<dim2; j++)
+            for(int j=0; j<dim2; j++)
             {
                 QTableWidgetItem *item = new QTableWidgetItem(dataVector[i*dim2+j],1);
                 if(!editable)   // default flag contains editable
@@ -78,7 +78,7 @@ std::vector<QString> DisplayArrayDialog::getDataVector()
 
 void DisplayArrayDialog::on_buttonBox_accepted()
 {
-    int numberOfValues = this->dataVector.size();
+    int numberOfValues = static_cast<int>(this->dataVector.size());
     for(int i= 0; i< numberOfValues; i++)
         this->dataVector[i] = ui->tableWidget->item(0,i)->text();
 
diff --git a/silecs-diagnostic-cpp/src/silecs-diagnostic/displayarraydialog.h b/silecs-diagnostic-cpp/src/silecs-diagnostic/displayarraydialog.h
index 2c5e524..cd2f19b 100755
--- a/silecs-diagnostic-cpp/src/silecs-diagnostic/displayarraydialog.h
+++ b/silecs-diagnostic-cpp/src/silecs-diagnostic/displayarraydialog.h
@@ -28,7 +28,7 @@ public:
     explicit DisplayArrayDialog(QWidget *parent = 0);
     ~DisplayArrayDialog();
 
-    void setDataVector(std::vector<QString> dataVector, bool editable, unsigned long dim2);
+    void setDataVector(std::vector<QString> dataVector, bool editable, int dim2);
 
     std::vector<QString> getDataVector();
 
diff --git a/silecs-diagnostic-cpp/src/silecs-diagnostic/silecsmodule.cpp b/silecs-diagnostic-cpp/src/silecs-diagnostic/silecsmodule.cpp
index 9f30def..659e2b5 100755
--- a/silecs-diagnostic-cpp/src/silecs-diagnostic/silecsmodule.cpp
+++ b/silecs-diagnostic-cpp/src/silecs-diagnostic/silecsmodule.cpp
@@ -78,23 +78,23 @@ void silecsModule::updatePLCRunState(Item *plcItem)
 		if( !plc->isConnected() )
 		{
 			plcItem->setText(index,"");
-			plcItem->setBackgroundColor(index,Qt::white);
+			plcItem->setBackground(index, Qt::white);
 		}
 		if( plc->isRunning() )
 		{
 			plcItem->setText(index,"running");
-			plcItem->setBackgroundColor(index,Qt::green);
+			plcItem->setBackground(index, Qt::green);
 		}
 		else
 		{
 			plcItem->setText(index,"stopped");
-			plcItem->setBackgroundColor(index,Qt::yellow);
+			plcItem->setBackground(index, Qt::yellow);
 		}
 	}
 	catch(const Silecs::SilecsException& ex2)
 	{
 		plcItem->setText(index,"state unknown");
-		plcItem->setBackgroundColor(index,Qt::red);
+		plcItem->setBackground(index, Qt::red);
 		std::string message = "Failed to obtain plc run-state: ";
 		message +=  ex2.what();
 		Utils::logError(messageConsole_,message);
@@ -192,8 +192,8 @@ Item *silecsModule::generateTree(string className, string deployFile)
                 registerItem->setText(1 , QString::fromStdString(reg->getBlockName()));
 
                 // Color background of input and output buffer
-                registerItem->setBackgroundColor(2,QColor(255,255,204));//light yellow
-                registerItem->setBackgroundColor(3,QColor(204,255,255));//light blue
+                registerItem->setBackground(2, QColor(255,255,204));//light yellow
+                registerItem->setBackground(3, QColor(204,255,255));//light blue
 
             }while(registerListSplitted);
         }
@@ -205,7 +205,7 @@ Item *silecsModule::generateTree(string className, string deployFile)
 }
 
 
-void silecsModule::setScalarDataInDeviceFromItem(Item *currentItem, std::string blockName) throw (std::string*)
+void silecsModule::setScalarDataInDeviceFromItem(Item *currentItem, std::string blockName)
 {
     Silecs::Device* device = (Silecs::Device*)(currentItem->getLinkedObject());
 
diff --git a/silecs-diagnostic-cpp/src/silecs-diagnostic/silecsmodule.h b/silecs-diagnostic-cpp/src/silecs-diagnostic/silecsmodule.h
index 92adcb6..85b0b99 100755
--- a/silecs-diagnostic-cpp/src/silecs-diagnostic/silecsmodule.h
+++ b/silecs-diagnostic-cpp/src/silecs-diagnostic/silecsmodule.h
@@ -76,7 +76,7 @@ public:
       * from the string present in the GUI
       * in case of error returns a string exception with the message
       */
-    void setScalarDataInDeviceFromItem(Item *currentItem, std::string blockName) throw (std::string*);
+    void setScalarDataInDeviceFromItem(Item *currentItem, std::string blockName);
 
     /**
       * Set the register with the proper data converting
diff --git a/silecs-diagnostic-cpp/src/silecs-diagnostic/stderrredirect.cpp b/silecs-diagnostic-cpp/src/silecs-diagnostic/stderrredirect.cpp
index 8183b04..b68cf31 100644
--- a/silecs-diagnostic-cpp/src/silecs-diagnostic/stderrredirect.cpp
+++ b/silecs-diagnostic-cpp/src/silecs-diagnostic/stderrredirect.cpp
@@ -13,6 +13,8 @@ Contributors:
 
 #include <silecs-diagnostic/stderrredirect.h>
 
+#include <cstring>
+
 #include <QtWidgets/QApplication>
 #include <QtWidgets/QMessageBox>
 #include <QtCore/QDir>
@@ -47,7 +49,12 @@ StdErrRedirect::StdErrRedirect(QTextEdit *errorLog,QObject *parent): QObject(par
         fileToRename.rename(tmpFileNameQtFormat+".old");
 
     // Set up redirection to this file:
-    freopen(tmpFileNameNativeFormat.toLatin1().constData(), "a+", stderr);
+    auto errStream = freopen(tmpFileNameNativeFormat.toLatin1().constData(), "a+", stderr);
+    if (errStream == nullptr)
+    {
+        throw std::runtime_error{"Failed to open file for stderr stream redirect. " +
+            std::string(std::strerror(errno))};
+    }
 
     // Initialise the QFileSystemWatcher:
     connect(&watcher, SIGNAL(fileChanged(const QString &)),
@@ -68,7 +75,7 @@ StdErrRedirect::~StdErrRedirect()
 
 void StdErrRedirect::fileChanged(const QString &filename)
 {
-    (void)filename;
+    Q_UNUSED(filename);
     tmp.open(QIODevice::ReadOnly);
     QTextStream stream(&tmp);
     QString content = stream.readAll();
-- 
GitLab