Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -44,13 +44,14 @@ set(OpenIGTLinkSimulator_SOURCES
OpenIGTLinkSimulatorApp.cpp
qDataGeneratorBase.cpp
qDataGeneratorTracking.cpp
qDataReadingTracker.cpp
igtlTCPConnectorBase.cxx
igtlTCPConnectorServer.cxx
igtlTCPConnectorClient.cxx
igtlTCPConnectorServerOIGTL.cxx
)

set(OpenIGTLinkSimulator_HEADERS OpenIGTLinkSimulatorApp.h qDataGeneratorBase.h qDataGeneratorTracking.h)
set(OpenIGTLinkSimulator_HEADERS OpenIGTLinkSimulatorApp.h qDataGeneratorBase.h qDataGeneratorTracking.h qDataReadingTracker.h)
set(OpenIGTLinkSimulator_FORMS OpenIGTLinkSimulatorWindow.ui)
#set(OpenIGTLinkSimulator_RESOURCES images.qrc)

Expand Down
220 changes: 148 additions & 72 deletions OpenIGTLinkSimulatorApp.cpp
Original file line number Diff line number Diff line change
@@ -1,29 +1,30 @@
/*=========================================================================

Program: OpenIGTLink Simulator
Language: C++

Copyright (c) Brigham and Women's Hospital. All rights reserved.

This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notices for more information.

=========================================================================*/
=========================================================================*/

#include <iostream>
#include <QtGui>
#include <QFile>

#include "OpenIGTLinkSimulatorApp.h"


#include "igtlOSUtil.h"
#include "igtlImageMessage.h"
#include "igtlServerSocket.h"
#include "igtlMultiThreader.h"
#include "igtlOSUtil.h"
#include "igtlTCPConnectorServerOIGTL.h"
#include "qDataGeneratorTracking.h"
#include "qDataReadingTracker.h"

const int OpenIGTLinkSimulatorApp::StatusColorTable[][3] = {
{100, 100, 100}, // STOP
Expand All @@ -33,7 +34,7 @@ const int OpenIGTLinkSimulatorApp::StatusColorTable[][3] = {
};

const int OpenIGTLinkSimulatorApp::DataIOColorTable[][3] = {
{50, 50, 50}, // None
{50, 50, 50}, // None
{100, 200, 100}, // Received
{200, 100, 100} // ERROR
};
Expand All @@ -47,8 +48,12 @@ OpenIGTLinkSimulatorApp::OpenIGTLinkSimulatorApp(QWidget *NOTUSED(parent))
fClientActive = false;

// Signals and Slots
connect(pbFilename, SIGNAL( clicked() ), this, SLOT( getPath() ));
connect(rbTrackingRandom, SIGNAL( clicked() ), this, SLOT( disable() ));
connect(rbTrackingFile, SIGNAL( clicked() ), this, SLOT( enable() ));
connect(pbQuit, SIGNAL( clicked() ), this, SLOT( quit() ));
connect(pbAbout, SIGNAL( clicked() ), this, SLOT( about() ));
connect(sbTrackingChannels, SIGNAL( valueChanged(int) ), this, SLOT( channel(int) ));
//connect(pbScannerActivate, SIGNAL( clicked() ), this, SLOT( scannerActivateClicked() ));
connect(pbClientActivate, SIGNAL( clicked() ), this, SLOT( clientActivateClicked() ));

Expand All @@ -60,7 +65,7 @@ OpenIGTLinkSimulatorApp::OpenIGTLinkSimulatorApp(QWidget *NOTUSED(parent))
// this, SLOT( imagePortChanged( const QString & ) ));
connect(leOpenIGTLinkPort, SIGNAL( textChanged( const QString & ) ),
this, SLOT( igtlPortChanged( const QString & ) ));

// Default values
QString qs;
//leScannerAddress->setText(DEFAULT_RMP_ADDR);
Expand All @@ -70,87 +75,150 @@ OpenIGTLinkSimulatorApp::OpenIGTLinkSimulatorApp(QWidget *NOTUSED(parent))
timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(updateStatus()));
timer->start(200);

// Data Generator
this->TrackingDataGenerator = new qDataGeneratorTracking();

//Data Generator for Random
this->TrackingDataGenerator = new qDataGeneratorTracking();
this->TrackingDataReader = new qDataReadingTracker();

//// OpenIGTLink Server Socket
oigtlConnector = igtl::TCPConnectorServerOIGTL::New();
oigtlConnector->SetPort(18944);

this->TrackingDataGenerator->SetConnector(oigtlConnector);
this->TrackingDataGenerator->Start();
this->Threader = igtl::MultiThreader::New();
this->Threader->SpawnThread((igtl::ThreadFunctionType) &igtl::TCPConnectorServerOIGTL::MonitorThreadFunction,
oigtlConnector);
this->Threader->SpawnThread((igtl::ThreadFunctionType) &igtl::TCPConnectorServerOIGTL::MonitorThreadFunction, oigtlConnector);
}

void OpenIGTLinkSimulatorApp::disable( )
{
pbFilename->setEnabled(false);
}



void OpenIGTLinkSimulatorApp::enable( )
{
pbFilename->setEnabled(true);
}

void OpenIGTLinkSimulatorApp::getPath()
{
QString path;

//path = QFileDialog::getOpenFileName(
// this,
// "Choose a file to open",
// QString::null,
// QString::null);
//
//lineEdit->setText( path );

QString path = QFileDialog::getOpenFileName(this,
tr("Open File"), "/Users",
tr("CSV Files (*.csv);;Text Files (*.txt)"));
if(path != " ")
{
QFile file(path);
if(!file.open(QIODevice::ReadOnly))
{
QMessageBox::critical(this, tr("Error"), tr("Could not open file"));
return;
}
QTextStream in(&file);
leFilename->setText( path );
file.close();
}
this->PathString = path.toUtf8().constData();

}


void OpenIGTLinkSimulatorApp::about()
{

QMessageBox::about(this,
"About OpenIGTLinkSimulator",
"OpenIGTLink Simulator\n\n"
"Written by Junichi Tokuda\n"
"Brigham and Women's Hospital.\n\n"
"Copyright (C) 2011-2014\n"
);

}


void OpenIGTLinkSimulatorApp::scannerActivateClicked()
{

if (fScannerActive)
{
//pbScannerActivate->setText("Activate");
//fScannerActive = false;
//pbScannerActivate->setText("Activate");
//fScannerActive = false;
}
else
{
//pbScannerActivate->setText("Deactivate");
//fScannerActive = true;
//pbScannerActivate->setText("Deactivate");
//fScannerActive = true;
}

}


void OpenIGTLinkSimulatorApp::clientActivateClicked()
{

if (fClientActive)
{
fClientActive = false;
if (oigtlConnector.IsNotNull())
{
oigtlConnector->Deactivate();
}
fClientActive = false;
if (oigtlConnector.IsNotNull())
{
std::cerr << "Deactivating OpenIGTLink connector with:" << std::endl;
std::cerr << " Port: " << igtlPort.toInt() << std::endl;
oigtlConnector->Deactivate();
}

rbTrackingFile->setEnabled(true);
rbTrackingRandom->setEnabled(true);
if (rbTrackingFile->isChecked())
pbFilename->setEnabled(true);
}

else if(!fClientActive && !rbTrackingFile->isChecked() && !rbTrackingRandom->isChecked())
QMessageBox::critical(this, tr("Error"), tr("Data source not selected!"));
else if(rbTrackingFile->isChecked() && leFilename->text()=="")
QMessageBox::critical(this, tr("Error"), tr("File not selected!"));

else
{
fClientActive = true;
if (oigtlConnector.IsNotNull())
{
std::cerr << "Activating OpenIGTLink connector with:" << std::endl;
std::cerr << " Port: " << igtlPort.toInt() << std::endl;
oigtlConnector->SetPort(igtlPort.toInt());
oigtlConnector->Activate();
}
fClientActive = true;

if (oigtlConnector.IsNotNull())
{
std::cerr << "Activating OpenIGTLink connector with:" << std::endl;
std::cerr << " Port: " << igtlPort.toInt() << std::endl;
oigtlConnector->SetPort(igtlPort.toInt());
oigtlConnector->Activate();
}
else
{
oigtlConnector = igtl::TCPConnectorServerOIGTL::New();
oigtlConnector->SetPort(18944);
if (oigtlConnector.IsNotNull())
{
std::cerr << "Activating OpenIGTLink connector with:" << std::endl;
std::cerr << " Port: " << igtlPort.toInt() << std::endl;
oigtlConnector->SetPort(igtlPort.toInt());
oigtlConnector->Activate();
}
}

rbTrackingFile->setEnabled(false);
rbTrackingRandom->setEnabled(false);
pbFilename->setEnabled(false);

if (rbTrackingFile->isChecked())
{
this->TrackingDataReader->SetConnector(oigtlConnector);
this->TrackingDataReader->SetFileName(this->PathString);
this->TrackingDataReader->Start();
}
else
{
this->TrackingDataGenerator->SetConnector(oigtlConnector);
this->TrackingDataGenerator->Start();
}

}

}


void OpenIGTLinkSimulatorApp::scannerAddressChanged( const QString & text )
{
scannerAddress = text;
Expand All @@ -175,25 +243,25 @@ void OpenIGTLinkSimulatorApp::changeStatusTextColor(QLineEdit* le, int status)
{
if (status < igtl::TCPConnectorBase::STATUS_NUM && status >= 0)
{
QPalette p = le->palette();
p.setColor( le->backgroundRole(),
QColor(StatusColorTable[status][0],
StatusColorTable[status][1],
StatusColorTable[status][2]) );
le->setPalette(p);
QPalette p = le->palette();
p.setColor( le->backgroundRole(),
QColor(StatusColorTable[status][0],
StatusColorTable[status][1],
StatusColorTable[status][2]) );
le->setPalette(p);
}
}

void OpenIGTLinkSimulatorApp::changeDataIOTextColor(QLineEdit* le, int status)
{
if (status < 3 && status >= 0)
{
QPalette p = le->palette();
p.setColor( le->backgroundRole(),
QColor(DataIOColorTable[status][0],
DataIOColorTable[status][1],
DataIOColorTable[status][2]) );
le->setPalette(p);
QPalette p = le->palette();
p.setColor( le->backgroundRole(),
QColor(DataIOColorTable[status][0],
DataIOColorTable[status][1],
DataIOColorTable[status][2]) );
le->setPalette(p);
}
}

Expand All @@ -202,35 +270,43 @@ void OpenIGTLinkSimulatorApp::updateStatus()
bool editClientFlag = true;
if (oigtlConnector.IsNotNull())
{
leStatusClient->setText(oigtlConnector->GetStatusString());
changeStatusTextColor(leStatusClient, oigtlConnector->GetStatus());
leOpenIGTLinkPort->setEnabled(oigtlConnector->GetStatus() == igtl::TCPConnectorBase::STATUS_STOP);
editClientFlag &= oigtlConnector->GetStatus() == igtl::TCPConnectorBase::STATUS_STOP;
if (oigtlConnector->GetStatus() == igtl::TCPConnectorBase::STATUS_STOP)
{
pbClientActivate->setText("Activate");
}
else
{
pbClientActivate->setText("Deactivate");
}
leStatusClient->setText(oigtlConnector->GetStatusString());
changeStatusTextColor(leStatusClient, oigtlConnector->GetStatus());
leOpenIGTLinkPort->setEnabled(oigtlConnector->GetStatus() == igtl::TCPConnectorBase::STATUS_STOP);
editClientFlag &= oigtlConnector->GetStatus() == igtl::TCPConnectorBase::STATUS_STOP;
if (oigtlConnector->GetStatus() == igtl::TCPConnectorBase::STATUS_STOP)
{
pbClientActivate->setText("Activate");
}
else
{
pbClientActivate->setText("Deactivate");
}
}
else{ pbAbout->setEnabled(false);}
//bool editScannerFlag = true;
//leScannerAddress->setEnabled(editScannerFlag);
//leControlPort->setEnabled(editScannerFlag);
//leImagePort->setEnabled(editClientFlag);

}

void OpenIGTLinkSimulatorApp::channel(int i)
{
std::cerr << "Channel changed to:" << i << std::endl;
this->TrackingDataReader->ChannelChanged(i);
this->TrackingDataGenerator->ChannelChanged(i);
}

void OpenIGTLinkSimulatorApp::quit()
{

if (oigtlConnector.IsNotNull())
{
oigtlConnector->CloseThread();
oigtlConnector->CloseThread();
}

timer->stop();
close();
}


}
Loading