1 #include "vvQPacsConnection.h"
2 #include "gdcmCompositeNetworkFunctions.h"
3 #include <QtGui/qlistview.h>
8 #include "vvPacsSettingsDialog.h"
12 vvQPacsConnection::vvQPacsConnection(QWidget *i_parent)
16 setWindowTitle(QString::fromUtf8("PACS CONNECTIONHHHH"));
18 ui.tabFilter->setTabText(0,QString(tr("Modality")));
19 ui.tabFilter->setTabText(1,QString(tr("Date")));
21 ui. tabNetwork->setTabText(0,QString(tr("Network")));
22 ui. tabNetwork->setTabText(1,QString(tr("Configuration")));
23 //ui.setChecked(true);
24 //ui.on_check_ModAll_clicked(true);
27 ui.networkCombo->addItem("");
28 ui.networkCombo->addItems(getDicomServers());
30 connect(ui.networkCombo,SIGNAL(currentIndexChanged(int)),this,SLOT(chooseServer(int)));
31 connect(ui.scanButton,SIGNAL(clicked()),this,SLOT(on_scanButton_clicked()));
32 connect(ui.importButton, SIGNAL(clicked()), this, SLOT(on_importButton_clicked()));
33 connect(ui.removeNetworkButton,SIGNAL(clicked()),this,SLOT(removeServer()));
34 connect(ui.NetworkButton,SIGNAL(clicked()),this,SLOT(modifyServer()));
38 void vvQPacsConnection::removeServer()
40 removeDicomServer(m_nickname);
41 ui.networkCombo->removeItem(ui.networkCombo->findText(QString(m_nickname.c_str())));
46 void vvQPacsConnection::modifyServer()
48 AddDicomServer(ui.NameEdit->text().toStdString(),ui.AETitleEdit->text().toStdString(),ui.AdressEdit->text().toStdString(),ui.PortEdit->text().toStdString());
53 void vvQPacsConnection::refreshNetworks()
55 ui.networkCombo->clear();
56 ui.networkCombo->addItem(QString());
57 ui.networkCombo->addItems(getDicomServers());
58 ui.NameEdit->setText(QString());
59 ui.AETitleEdit->setText(QString());
60 ui.AdressEdit->setText(QString());
61 ui.PortEdit->setText(QString());
62 ui.tabNetwork->setCurrentIndex(0);
65 void vvQPacsConnection::on_clearButton_clicked()
67 Patientmodel->removeRows(0, Patientmodel->rowCount(),QModelIndex());
68 Studymodel->removeRows(0, Studymodel->rowCount(),QModelIndex());
69 Seriesmodel->removeRows(0, Seriesmodel->rowCount(),QModelIndex());
70 Imagesmodel->removeRows(0, Imagesmodel->rowCount(),QModelIndex());
73 void vvQPacsConnection::on_scanButton_clicked()
76 manageStudiesFilter(true);
77 bool didItWork = gdcm::CompositeNetworkFunctions::CEcho(m_adress.c_str(), atoi(m_port.c_str()), "CREATIS", m_nickname.c_str() );
80 std::vector< std::pair<gdcm::Tag, std::string> > keys = getKeys();
82 gdcm::EQueryLevel theLevel = gdcm::eStudy;
83 gdcm::ERootType theRoot = gdcm::eStudyRootType;//ePatientRootType;
85 std::vector<gdcm::DataSet> theDataSet;
86 theLevel = gdcm::ePatient;
87 theRoot = gdcm::ePatientRootType;//ePatientRootType;
88 gdcm::SmartPointer<gdcm::BaseRootQuery> theQuery = gdcm::CompositeNetworkFunctions::ConstructQuery(theRoot, theLevel ,getPatientKeys(""));
89 gdcm::CompositeNetworkFunctions::CFind(m_adress.c_str(), atoi(m_port.c_str()), theQuery, theDataSet, "CREATIS", m_nickname.c_str());
90 std::vector<gdcm::DataSet>::iterator it_ds = theDataSet.begin();
92 for(; it_ds != theDataSet.end(); it_ds++)
94 QList<QStandardItem *> items;
95 const gdcm::DataSet ds = (*it_ds);
96 std::vector< std::pair<gdcm::Tag, std::string> >::iterator it_key = keys.begin();
98 for(; it_key != keys.end(); it_key++, ind++)
100 gdcm::DataElement de = ds.GetDataElement((*it_key).first);
101 QStandardItem *item = new QStandardItem;
102 const gdcm::ByteValue *bv = (de).GetByteValue();
105 std::string buffer = std::string( bv->GetPointer(), bv->GetLength() );
106 item->setText(tr(buffer.c_str()));
110 item->setText(tr(""));
114 item->setCheckable(true);
116 items.push_back(item);
118 Patientmodel->appendRow(items);
124 void vvQPacsConnection::on_optionsButton_clicked()
126 vvPacsSettingsDialog *dg = new vvPacsSettingsDialog(this);
130 void vvQPacsConnection::convertDataSet(std::vector<gdcm::DataSet> i_ds, QStandardItemModel *i_model, std::vector< std::pair<gdcm::Tag, std::string> > keys)
132 gdcm::Tag tagdb(0x0008,0x0020);
133 std::vector<gdcm::DataSet>::iterator it_ds = i_ds.begin();
134 for(; it_ds != i_ds.end(); it_ds++)
136 QList<QStandardItem *> items;
137 const gdcm::DataSet ds = (*it_ds);
138 std::vector< std::pair<gdcm::Tag, std::string> >::iterator it_key = keys.begin();
140 for(; it_key != keys.end(); it_key++, ind++)
142 gdcm::DataElement de = ds.GetDataElement((*it_key).first);
143 QStandardItem *item = new QStandardItem;
144 const gdcm::ByteValue *bv = (de).GetByteValue();
147 std::string buffer = std::string( bv->GetPointer(), bv->GetLength() );
148 /*if((*it_key).first == tagdb)
151 date.fromString(tr(buffer.c_str()),"yyyy'MM'd");
152 item->setText(date.toString());
156 item->setText(tr(buffer.c_str()));
161 item->setText(tr(""));
165 item->setCheckable(true);
167 items.push_back(item);
169 i_model->appendRow(items);
174 // TreeViews creation
175 void vvQPacsConnection::createTreeView()
178 Patientmodel = new QStandardItemModel(0,2,this);
179 QStringList Patientlist;
180 Patientlist.push_back(tr("PATIENT NAME"));
181 Patientlist.push_back(tr("PATIENT ID"));
182 Patientmodel->setHorizontalHeaderLabels(Patientlist);
183 ui.patientTreeView->setModel(Patientmodel);
184 ui.patientTreeView->setEnabled(true);
185 connect(ui.patientTreeView, SIGNAL(clicked(QModelIndex)), this, SLOT(selectStudies(QModelIndex)));
188 Studymodel = new QStandardItemModel(0,3,this);
189 QStringList Studylist;
190 Studylist.push_back(tr("DESCRIPTION"));
191 Studylist.push_back(tr("DATE"));
192 Studylist.push_back(tr("HOUR"));
193 Studymodel->setHorizontalHeaderLabels(Studylist);
194 ui.studyTreeView->setModel(Studymodel);
195 connect(ui.studyTreeView, SIGNAL(clicked(QModelIndex)), this, SLOT(selectSeries(QModelIndex)));
199 Seriesmodel = new QStandardItemModel(0,2,this);
200 QStringList Serieslist;
201 Serieslist.push_back(tr("MODALITY"));
202 Serieslist.push_back(tr("DESCRIPTION"));
203 Serieslist.push_back(tr("no. accept."));
204 Seriesmodel->setHorizontalHeaderLabels(Serieslist);
205 ui.seriesTreeView->setModel(Seriesmodel);
206 connect(ui.seriesTreeView, SIGNAL(clicked(QModelIndex)), this, SLOT(selectImages(QModelIndex)));
209 Imagesmodel = new QStandardItemModel(0,1,this);
210 QStringList Imageslist;
211 Imageslist.push_back(tr("instance number"));
212 Imagesmodel->setHorizontalHeaderLabels(Imageslist);
213 ui.imagesTreeView->setModel(Imagesmodel);
216 void vvQPacsConnection::selectStudies(const QModelIndex &index)
218 Studymodel->removeRows(0, Studymodel->rowCount(),QModelIndex());
219 QVariant elt= Patientmodel->data(index.sibling(index.row(),1));
220 m_patient=elt.toString().toStdString();
221 manageSeriesFilter(true);
222 gdcm::EQueryLevel theLevel = gdcm::eStudy;
223 gdcm::ERootType theRoot = gdcm::ePatientRootType;//ePatientRootType;
224 std::vector<gdcm::DataSet> theDataSet;
225 std::vector< std::pair<gdcm::Tag, std::string> > keys;
228 gdcm::Tag tagsd(0x0010,0x0020);
229 keys.push_back(std::make_pair(tagsd, m_patient));
231 gdcm::Tag tagsdc(0x0008,0x1030);
232 keys.push_back(std::make_pair(tagsdc, ""));
234 gdcm::Tag tagdb(0x0008,0x0020);
235 keys.push_back(std::make_pair(tagdb, ""));
237 gdcm::Tag tagsdh(0x0008,0x0030);
238 keys.push_back(std::make_pair(tagsdh, ""));
239 gdcm::SmartPointer<gdcm::BaseRootQuery> theQuery = gdcm::CompositeNetworkFunctions::ConstructQuery(theRoot, theLevel ,keys);
240 gdcm::CompositeNetworkFunctions::CFind(m_adress.c_str(), atoi(m_port.c_str()), theQuery, theDataSet, "CREATIS", m_nickname.c_str());
241 convertDataSet(theDataSet, Studymodel, getStudyKeys(""));
245 void vvQPacsConnection::selectSeries(const QModelIndex &index)
247 Seriesmodel->removeRows(0, Seriesmodel->rowCount(),QModelIndex());
248 QVariant elt= Studymodel->data(index.sibling(index.row(),3));
249 QVariant elt2= Patientmodel->data(index.sibling(ui.patientTreeView->selectionModel()->selectedRows().first().row(),1));
251 //manageImagesFilter(true);
252 gdcm::EQueryLevel theLevel = gdcm::eSeries;
253 gdcm::ERootType theRoot = gdcm::ePatientRootType;//ePatientRootType;
254 std::vector<gdcm::DataSet> theDataSet;
255 std::vector< std::pair<gdcm::Tag, std::string> > keys;
258 keys.push_back(std::make_pair(gdcm::Tag(0x0010,0x0020), m_patient));
261 keys.push_back(std::make_pair(gdcm::Tag(0x0020,0x000d), elt.toString().toStdString()));
265 keys.push_back(std::make_pair(gdcm::Tag(0x0008,0x0060), elt.toString().toStdString()));
267 keys.push_back(std::make_pair(gdcm::Tag(0x0008,0x0060), elt.toString().toStdString()));
268 // Acceptance NUmber????
269 keys.push_back(std::make_pair(gdcm::Tag(0x0020,0x000e), elt.toString().toStdString()));
271 gdcm::SmartPointer<gdcm::BaseRootQuery> theQuery = gdcm::CompositeNetworkFunctions::ConstructQuery(theRoot, theLevel ,keys);
274 keys.push_back(std::make_pair(gdcm::Tag(0x0008,0x0060), elt.toString().toStdString()));
276 keys.push_back(std::make_pair(gdcm::Tag(0x0008,0x0060), elt.toString().toStdString()));
277 // Acceptance NUmber????
278 keys.push_back(std::make_pair(gdcm::Tag(0x0020,0x000e), elt.toString().toStdString()));
280 gdcm::CompositeNetworkFunctions::CFind(m_adress.c_str(), atoi(m_port.c_str()), theQuery, theDataSet, "CREATIS", m_nickname.c_str());
281 convertDataSet(theDataSet, Seriesmodel, keys);
284 void vvQPacsConnection::selectImages(const QModelIndex &index)
286 Imagesmodel->removeRows(0, Imagesmodel->rowCount(),QModelIndex());
287 QVariant elt= Seriesmodel->data(index.sibling(index.row(),2));
288 QVariant elt2= Patientmodel->data(index.sibling(ui.patientTreeView->selectionModel()->selectedRows().first().row(),1));
290 //manageImagesFilter(true);
291 gdcm::EQueryLevel theLevel = gdcm::eImage;
292 gdcm::ERootType theRoot = gdcm::ePatientRootType;//ePatientRootType;
293 std::vector<gdcm::DataSet> theDataSet;
294 std::vector< std::pair<gdcm::Tag, std::string> > keys;
296 gdcm::Tag tagsd(0x0010,0x0020);
297 keys.push_back(std::make_pair(tagsd, m_patient));
299 gdcm::Tag tagss(0x0020,0x000e);
300 keys.push_back(std::make_pair(tagss, elt.toString().toStdString()));
301 //= getStudyKeys(elt.toString().toStdString());
304 gdcm::Tag tagsdc(0x0020,0x0013);
305 keys.push_back(std::make_pair(tagsdc, ""));
308 gdcm::SmartPointer<gdcm::BaseRootQuery> theQuery = gdcm::CompositeNetworkFunctions::ConstructQuery(theRoot, theLevel ,keys);
312 keys.push_back(std::make_pair(tagsdc, ""));
314 gdcm::CompositeNetworkFunctions::CFind(m_adress.c_str(), atoi(m_port.c_str()), theQuery, theDataSet, "CREATIS", m_nickname.c_str());
315 convertDataSet(theDataSet, Imagesmodel, keys);
319 void vvQPacsConnection::manageStudiesFilter(bool i_enable)
321 ui.text_PHYS->setEnabled(i_enable);
322 ui.text_SDESC->setEnabled(i_enable);
323 ui.dateTab->setEnabled(i_enable);
327 void vvQPacsConnection::manageSeriesFilter(bool i_enable)
329 ui.modalityTab->setEnabled(i_enable);
332 std::vector< std::pair<gdcm::Tag, std::string> > vvQPacsConnection::getPatientKeys(const std::string i_val)
334 std::vector< std::pair<gdcm::Tag, std::string> > keys;
336 gdcm::Tag tag(0x0010,0x0010);
337 keys.push_back(std::make_pair(tag, ""));
340 gdcm::Tag tagpid(0x0010,0x0020);
341 keys.push_back(std::make_pair(tagpid, i_val));
345 std::vector< std::pair<gdcm::Tag, std::string> > vvQPacsConnection::getStudyKeys(const std::string i_val)
347 std::vector< std::pair<gdcm::Tag, std::string> > keys;
349 gdcm::Tag tagsdc(0x0008,0x1030);
350 keys.push_back(std::make_pair(tagsdc, ""));
352 gdcm::Tag tagdb(0x0008,0x0020);
353 keys.push_back(std::make_pair(tagdb, ""));
355 gdcm::Tag tagsdh(0x0008,0x0030);
356 keys.push_back(std::make_pair(tagsdh, ""));
357 // Study Instance UID
358 gdcm::Tag tagsid(0x0020,0x000d);
359 keys.push_back(std::make_pair(tagsid, i_val));
365 std::vector< std::pair<gdcm::Tag, std::string> > vvQPacsConnection::getSeriesKeys(const std::string i_val)
367 std::vector< std::pair<gdcm::Tag, std::string> > keys;
369 gdcm::Tag tagsm(0x0008,0x0060);
370 keys.push_back(std::make_pair(tagsm, ""));
372 gdcm::Tag tagdb(0x0008,0x103e);
373 keys.push_back(std::make_pair(tagdb, ""));
375 gdcm::Tag tagsdh(0x0020,0x000e);
376 keys.push_back(std::make_pair(tagsdh, ""));
377 // Study Instance UID
378 gdcm::Tag tagsid(0x0020,0x1209);
379 keys.push_back(std::make_pair(tagsid, i_val));
383 std::vector< std::pair<gdcm::Tag, std::string> > vvQPacsConnection::getKeys()
385 std::vector< std::pair<gdcm::Tag, std::string> > keys;
387 gdcm::Tag tag(0x0010,0x0010);
388 keys.push_back(std::make_pair(tag, ""));
391 gdcm::Tag tagpid(0x0010,0x0020);
392 keys.push_back(std::make_pair(tagpid, ""));
395 gdcm::Tag tagmod(0x0008,0x0061);
396 keys.push_back(std::make_pair(tagmod, ""));
399 gdcm::Tag tagdb(0x0010,0x0030);
400 keys.push_back(std::make_pair(tagdb, ""));
403 gdcm::Tag tagsd(0x0020,0x000D);
404 keys.push_back(std::make_pair(tagsd, ""));
407 //gdcm::Tag tagst(8,30);
408 //keys.push_back(std::make_pair(tagst, ""));
410 //// Study Description
411 //gdcm::Tag tagsdc(8,1030);
412 //keys.push_back(std::make_pair(tagsdc, ""));
415 //gdcm::Tag tagacc(8,50);
416 //keys.push_back(std::make_pair(tagacc, ""));
421 void vvQPacsConnection::on_check_ModAll_clicked(bool state)
423 ui.check_MR->setEnabled(!state);
424 ui.check_CR->setEnabled(!state);
425 ui.check_OT->setEnabled(!state);
426 ui.check_RF->setEnabled(!state);
427 ui.check_SC->setEnabled(!state);
428 ui.check_CT->setEnabled(!state);
429 ui.check_US->setEnabled(!state);
430 ui.check_NM->setEnabled(!state);
431 ui.check_DR->setEnabled(!state);
432 ui.check_US->setEnabled(!state);
433 ui.check_NM->setEnabled(!state);
434 ui.check_DR->setEnabled(!state);
435 ui.check_SR->setEnabled(!state);
436 ui.check_XA->setEnabled(!state);
437 ui.check_MG->setEnabled(!state);
440 ui.check_MR->setChecked(state);
441 ui.check_CR->setChecked(state);
442 ui.check_OT->setChecked(state);
443 ui.check_RF->setChecked(state);
444 ui.check_SC->setChecked(state);
445 ui.check_CT->setChecked(state);
446 ui.check_US->setChecked(state);
447 ui.check_NM->setChecked(state);
448 ui.check_DR->setChecked(state);
449 ui.check_US->setChecked(state);
450 ui.check_NM->setChecked(state);
451 ui.check_DR->setChecked(state);
452 ui.check_SR->setChecked(state);
453 ui.check_XA->setChecked(state);
454 ui.check_MG->setChecked(state);
459 void vvQPacsConnection::chooseServer(int index)
461 std::map < std::string, std:: string> values = getDicomServer(ui.networkCombo->currentText());
462 m_port = values["PORT"];
463 m_aetitle = values["AETITLE"];
464 m_adress= values["ADRESS"];
465 m_nickname = values["nickname"];
466 ui.AdressEdit->setText(QString(m_adress.c_str()));
467 ui.AETitleEdit->setText(QString(m_aetitle.c_str()));
468 ui.NameEdit->setText(QString(m_nickname.c_str()));
469 ui.PortEdit->setText(QString(m_port.c_str()));
472 void vvQPacsConnection::on_importButton_clicked()
476 QVariant elt= Patientmodel->data(index.sibling(ui.patientTreeView->selectionModel()->selectedRows().first().row(),1));
478 gdcm::EQueryLevel theLevel = gdcm::ePatient;
479 gdcm::ERootType theRoot = gdcm::ePatientRootType;//ePatientRootType;
480 std::vector<gdcm::DataSet> theDataSet;
481 std::vector< std::pair<gdcm::Tag, std::string> > keys;
484 gdcm::Tag tagsdc(0x0010,0x0020);
485 keys.push_back(std::make_pair(tagsdc, elt.toString().toStdString()));
486 gdcm::SmartPointer<gdcm::BaseRootQuery> theQuery = gdcm::CompositeNetworkFunctions::ConstructQuery(theRoot, theLevel ,keys);
487 // gdcm::CompositeNetworkFunctions::CFind("127.0.0.1", 5678, theQuery, theDataSet, "CREATIS", "CONQUESTSRV1");
489 bool didItWork = gdcm::CompositeNetworkFunctions::CMove(m_adress.c_str(),atoi(m_port.c_str()), theQuery, 0,
490 "CREATIS", m_nickname.c_str() );