#include "cutpanel.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "qscrollview.h" #include #include #include #include #include #include #include #include #include #include #include #include "mainwin.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "PixDBData.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "Module.h" #include "ModItem.h" #include "cutpanel.h" #include "cutdiabase.h" #include "cutpanelbase.h" #include "CutItem.h" #include "CutDia.h" #include "cutpanel.h" #include "mainwin.h" #include "ModItem.h" #include "Module.h" #include "DAEngine.h" using namespace std; cutPanel::cutPanel(DAEngine *eng, QWidget* parent , const char* name , WFlags fl ) :cutPanelBase(parent, name, fl) { m_engine = eng; cutList->setSelectionMode(QListView::Single); connect(pb_OK,SIGNAL(clicked()),this,SLOT(accept_cuts())); // sort list by test type cutList->setSorting(3); //Menubar settings m_menu = new QMenuBar(this); QPopupMenu *fileMenu = new QPopupMenu( this ); fileMenu->insertItem( "&New cut", this, SLOT(newCut()) ); fileMenu->insertItem( "&Load cuts", this, SLOT(loadCuts()) ); fileMenu->insertItem( "&Save cuts", this, SLOT(saveCuts()) ); fileMenu->insertSeparator(); fileMenu->insertItem( "&Accept + close", this, SLOT(accept_cuts()) ); m_menu->insertItem( "&Cuts", fileMenu ); // cout<<"was ist los?"<::iterator it = m_engine->m_cuts.begin(); // for(; it!= m_engine->m_cuts.end();it++) // { // cout<<(*it)->getCutName()<loadCuts(load.latin1()); getCuts(); //update cutlist } void cutPanel::getCuts()//get the cuts from engine { cutList->clear(); std::vector::iterator it = m_engine->m_cuts.begin(); for(; it!= m_engine->m_cuts.end();it++) { QString min, max; if((*it)->getMin()==UNDEFMIN) min = "..."; else min = QString::number((*it)->getMin()); if((*it)->getMax()==UNDEFMAX) max = "..."; else max = QString::number((*it)->getMax()); if((*it)->getTestType()=="BAD PIXEL") { new CutItem(cutList,(*it)->getCutName().c_str(),min,max, (*it)->getTestType().c_str(),"",""); } else { new CutItem(cutList,(*it)->getCutName().c_str(),min,max, (*it)->getTestType().c_str(),(*it)->getHistoType().c_str(), (*it)->getActType().c_str()); } } } void cutPanel::saveCuts() { //speichern der cuts QStringList filter; filter += "text file (*.txt)"; QFileDialog fdia("~/",QString::null,this,"select file",TRUE); fdia.setFilters(filter); fdia.setMode(QFileDialog::AnyFile); if(fdia.exec() != QDialog::Accepted) { //nicht speichern return; } QString save = fdia.selectedFile(); //cout<<"der Pfad zum speichern ist: "<saveCuts(save.latin1()); } void cutPanel::newCut() { //create new Dialog CutDia dlg( this ); Modul *tmpmod = new Modul("a","/b/d/512345/","c"); std::map actTypes = tmpmod->getActionTypes(); // cout<<"anz "<currentText().latin1()]==Modul::NBAD_PIXEL) //if(dlg.cb_testtype->currentText()=="NBAD_PIXEL") { m_engine->m_cuts.push_back(new BadPixCut( dlg.le_cutname->text(), dlg.le_min->text(), dlg.le_max->text(), dlg.cb_testtype->currentText(), dlg.cb_histotype->currentText(), dlg.cb_actiontype->currentText(), dlg.cb_pixeltype->currentText(), dlg.le_badpixmin->text(), dlg.le_badpixmax->text())); } else { m_engine->m_cuts.push_back(new Cut( dlg.le_cutname->text(), dlg.le_min->text(), dlg.le_max->text(), dlg.cb_testtype->currentText(), dlg.cb_histotype->currentText(), dlg.cb_actiontype->currentText(), dlg.cb_pixeltype->currentText())); } getCuts(); //update cutlist } delete tmpmod; tmpmod=0; } void cutPanel::accept_cuts() { this->close(); } void cutPanel::deletecut() { //delete the marked cuts //cutList->removeItem(cutList->selectedItem()); CutItem *item = dynamic_cast(cutList->selectedItem()); if(item==0) return; std::vector::iterator it = m_engine->m_cuts.begin(); if(m_engine->m_cuts.size()==1) m_engine->m_cuts.erase(it); else { for(; it!= m_engine->m_cuts.end();it++) { if(item->getCutName() == (*it)->getCutName() && item->getTestType() == (*it)->getTestType()) { m_engine->m_cuts.erase(it); break; //importent, otherwise segmentation violation } } } getCuts(); //update cutlist from engine } void cutPanel::editcut(QListViewItem *lvitem) { CutDia dlg( this ); CutItem *item = dynamic_cast(lvitem); Modul *tmpmod = new Modul("a","/b/d/512345/","c"); std::map actTypes = tmpmod->getActionTypes(); //set the cutvalues for the dialog for(int i=0; icount(); i++){ if(string(dlg.cb_histotype->text(i).latin1())==item->getHistoType()){ dlg.cb_histotype->setCurrentItem(i); break; } } for(int i=0; icount(); i++){ if(string(dlg.cb_testtype->text(i).latin1())==item->getTestType()){ dlg.cb_testtype->setCurrentItem(i); break; } } for(int i=0; icount(); i++){ if(string(dlg.cb_actiontype->text(i).latin1())==item->getActType()){ dlg.cb_actiontype->setCurrentItem(i); break; } } dlg.le_cutname->setText( item->getCutName()); dlg.le_min->setText(item->getMin());//QString::number(item->getMin())); dlg.le_max->setText(item->getMax());//QString::number(item->getMax())); //find the corresponding cut in m_engine->m_cuts Cut *thecut = m_engine->findCut(item->getCutName().c_str(), item->getTestType().c_str()); for(int i=0; icount(); i++){ if(string(dlg.cb_pixeltype->text(i).latin1())==thecut->getPixType()){ dlg.cb_pixeltype->setCurrentItem(i); break; } } //if NBAD_PIXEL then get cutvalues of number of BadPix if(dlg.setBadPixEnable()) { if(((BadPixCut *)thecut)->getBadPixMin() == UNDEFMIN) dlg.le_badpixmin->setText("..."); else dlg.le_badpixmin->setText(QString::number(((BadPixCut *)thecut)->getBadPixMin())); if(((BadPixCut *)thecut)->getBadPixMax() == UNDEFMAX) dlg.le_badpixmax->setText("..."); else dlg.le_badpixmax->setText(QString::number(((BadPixCut *)thecut)->getBadPixMax())); } dlg.setTotalBadPixEnable(); if( dlg.exec() == QDialog::Accepted ) { if(thecut !=0) { thecut->setCutName(dlg.le_cutname->text()); thecut->setMin(dlg.le_min->text()); thecut->setMax(dlg.le_max->text()); thecut->setTestType(dlg.cb_testtype->currentText()); thecut->setHistoType(dlg.cb_histotype->currentText()); thecut->setActType(dlg.cb_actiontype->currentText()); thecut->setPixType(dlg.cb_pixeltype->currentText()); if(actTypes[dlg.cb_actiontype->currentText()]== Modul::NBAD_PIXEL) { ((BadPixCut *)thecut)->setBadPixMin(dlg.le_badpixmin->text()); ((BadPixCut *)thecut)->setBadPixMax(dlg.le_badpixmax->text()); } getCuts(); //update cutlist from engine } else std::cout<<"Error: Can not find the corresponding Cut"<