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
00165
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 }