choose_views_dialog.cpp

Go to the documentation of this file.
00001 //--------------------------------------------------
00012 //---------------------------------------------------
00013 #include "choose_views_dialog.h"
00014 
00015 #include "../global/global_definitions.h"
00016 
00017 #include "../controller/controller.h"
00018 
00019 #include <QMessageBox>
00020 
00021 #include <iostream>
00022 
00023 namespace imedgine 
00024 {
00025 
00026   ChooseViewsDialog::ChooseViewsDialog( QWidget* parent, Qt::WFlags f )
00027   : QDialog(parent, f)
00028   {
00029     setupUi(this);
00030     initializeConnections();
00031     
00032     
00033   }
00034   
00035   
00036   ChooseViewsDialog::~ChooseViewsDialog()
00037   {
00038   }
00039   
00040   void ChooseViewsDialog::moveRightSlot()
00041   {
00042     QList<QListWidgetItem *> items = all_views_listwidget_->selectedItems();
00043     
00044     bool items_inserted = false;
00045     
00046     for (int counter = 0; counter < items.size(); ++counter) 
00047     {
00048       selected_views_listwidget_->addItem(new QListWidgetItem(*items.at(counter)));
00049       items_inserted = true;
00050     }
00051     
00052     if(items_inserted && !ok_button_->isEnabled())
00053     {
00054       ok_button_->setEnabled(true);
00055       delete_button_->setEnabled(true);
00056     }
00057   }
00058   
00059   void ChooseViewsDialog::initializeConnections()
00060   {
00061     
00062     connect(move_right_button_, SIGNAL(clicked()),
00063             this, SLOT(moveRightSlot()));
00064     connect(delete_button_,SIGNAL(clicked()),
00065             this, SLOT(deleteItemSlot()));
00066     connect(move_up_button_, SIGNAL(clicked()),
00067             this, SLOT(moveUpSlot()));
00068     connect(move_down_button_, SIGNAL(clicked()),
00069             this, SLOT(moveDownSlot()));
00070   }
00071   
00072   bool ChooseViewsDialog::fillListWidget(
00073       std::vector<std::string> const& loadedDatasets)
00074   {
00075     std::vector<std::string>::const_iterator iterator = loadedDatasets.begin();
00076     
00077     bool filling_success = true;
00078     try{
00079     while(iterator != loadedDatasets.end())
00080     {
00081       QString temp_string = QString((*iterator).c_str());
00082 
00083       std::string index = temp_string.toStdString();
00084       
00085         QString new_string = temp_string + tr(": Axial");
00086         all_views_listwidget_->addItem(new_string);
00087         lookup_map_[new_string.toStdString()] =  
00088             std::pair<std::string, view_type>(*iterator, 
00089               Controller::getInstance().getViewTypeForDatasetSlice(*iterator, AXIAL_SLICE));
00090   
00091         new_string = temp_string + tr(": Sagittal");
00092         all_views_listwidget_->addItem(new_string);
00093         lookup_map_[new_string.toStdString()] =  
00094             std::pair<std::string, view_type>(*iterator, Controller::getInstance().getViewTypeForDatasetSlice(*iterator, SAGITTAL_SLICE));
00095         
00096         new_string = temp_string + tr(": Coronal");
00097         all_views_listwidget_->addItem(new_string); 
00098         lookup_map_[new_string.toStdString()] =  
00099             std::pair<std::string, view_type>(*iterator, Controller::getInstance().getViewTypeForDatasetSlice(*iterator, CORONAL_SLICE));
00100         
00101         new_string = temp_string + tr(": 3D-View");
00102         all_views_listwidget_->addItem(new_string);
00103         lookup_map_[new_string.toStdString()] =  
00104             std::pair<std::string, view_type>(*iterator, VOXEL_VIEW);
00105         iterator++;
00106 
00107     }
00108     }
00109     catch(DatasetNotFoundException &exc)
00110     {
00111       QMessageBox::critical(this, tr("Error"), 
00112                             tr("This is not good!"));
00113       filling_success = false;
00114       QDialog::reject();
00115         
00116     }
00117     if(!filling_success)
00118     {
00119       return false;
00120     }
00121     return true;
00122   }
00123   
00124   
00125   int ChooseViewsDialog::evaluateList()
00126   {
00127     if(selected_views_listwidget_->count() == 0)
00128     {
00129       return 0;
00130     }
00131     
00132     std::vector<view_pointer_type> view_vector;
00133     int counter = 1;
00134     
00135     for(counter = 0; counter < selected_views_listwidget_->count();++counter)
00136     {
00137       
00138       std::cout << counter << std::endl;
00139       QString str = (selected_views_listwidget_->item(counter))->text();
00140       
00141       view_vector.push_back(
00142           Controller::getInstance().getViewOfDataset(
00143             (lookup_map_[str.toStdString()]).second, 
00144             (lookup_map_[str.toStdString()]).first));
00145     }
00146     
00147     emit sendViewVector(view_vector);
00148     return counter;
00149   }
00150   
00151   void ChooseViewsDialog::accept()
00152   {
00153     if(evaluateList() != 0)
00154     {
00155       QDialog::hide();
00156     }
00157   }
00158   
00159   void ChooseViewsDialog::show()
00160   {
00161     selected_views_listwidget_->clear();
00162     all_views_listwidget_->clearSelection();
00163     ok_button_->setEnabled(false);
00164     //move_down_button_->setEnabled(false);
00165     //move_up_button_->setEnabled(false);
00166     delete_button_->setEnabled(false);
00167     
00168     std::vector<dataset_key_type> key_container;
00169     Controller::getInstance().getLoadedDatasetKeys(key_container);
00170     
00171     all_views_listwidget_->clear();
00172     
00173     if(!fillListWidget(key_container))
00174     {
00175       all_views_listwidget_->clear();
00176     }
00177     
00178     QDialog::show();
00179   }
00180   
00181   void ChooseViewsDialog::deleteItemSlot()
00182   {
00183     QList<QListWidgetItem *> items =
00184         selected_views_listwidget_->selectedItems();
00185   
00186     
00187     for (int counter = 0; counter < items.size(); ++counter) 
00188     {
00189       delete selected_views_listwidget_->takeItem(
00190           selected_views_listwidget_->row(items.at(counter)));
00191       
00192     }
00193     if(selected_views_listwidget_->count() == 0)
00194     {
00195       ok_button_->setEnabled(false);
00196       delete_button_->setEnabled(false);
00197     }
00198   }
00199   
00200   void ChooseViewsDialog::moveUpSlot()
00201   {
00202     QList<QListWidgetItem *> items =
00203         selected_views_listwidget_->selectedItems();
00204     
00205     if(items.size() != 1)
00206     {
00207       return;
00208     }
00209     
00210     if(selected_views_listwidget_->isItemSelected(
00211         selected_views_listwidget_->item(0)))
00212     {
00213       return;
00214     }
00215     
00216     int the_row = selected_views_listwidget_->row(items.at(0));
00217     QListWidgetItem* the_item = 
00218         selected_views_listwidget_->takeItem(the_row);
00219     selected_views_listwidget_->insertItem(the_row - 1, the_item);
00220     selected_views_listwidget_->setItemSelected(the_item, true);
00221     selected_views_listwidget_->setItemSelected(
00222         selected_views_listwidget_->item(the_row), false);
00223   }
00224   
00225   void ChooseViewsDialog::moveDownSlot()
00226   {
00227     QList<QListWidgetItem *> items =
00228         selected_views_listwidget_->selectedItems();
00229     
00230     if(items.size() != 1)
00231     {
00232       return;
00233     }
00234     
00235     if(selected_views_listwidget_->isItemSelected(
00236       selected_views_listwidget_->item(selected_views_listwidget_->count())))
00237     {
00238       return;
00239     }
00240     
00241     int the_row = selected_views_listwidget_->row(items.at(0));
00242     QListWidgetItem* the_item = 
00243         selected_views_listwidget_->takeItem(the_row);
00244     selected_views_listwidget_->insertItem(the_row + 1, the_item);
00245     selected_views_listwidget_->setItemSelected(the_item, true);
00246     selected_views_listwidget_->setItemSelected(
00247         selected_views_listwidget_->item(the_row), false);
00248   }
00249 }

Generated on Sun Aug 13 18:19:40 2006 for iMEDgine by  doxygen 1.4.6