00001
00012
00013 #include <iostream>
00014
00015 #include <QPushButton>
00016 #include <QMessageBox>
00017
00018 #include "tab_organizer.h"
00019 #include "view_container_widget.h"
00020 #include "../viewer/view.h"
00021
00022 #include "../controller/controller.h"
00023
00024 namespace imedgine
00025 {
00026
00027
00028
00029 TabOrganizer::TabOrganizer( QWidget* parent )
00030 : QTabWidget( parent )
00031 {
00032 close_button_ = new QPushButton(tr("close","TabOrganizer"), this);
00033 setCornerWidget(close_button_, Qt::TopRightCorner);
00034
00035 connect( close_button_, SIGNAL( clicked() ),
00036 this, SLOT( closePressedSlot() ) );
00037 }
00038
00039
00040
00041
00042 TabOrganizer::~TabOrganizer()
00043 {
00044 }
00045
00046
00047
00048 void TabOrganizer::closePressedSlot()
00049 {
00050 QWidget* temp_widget = widget( currentIndex() );
00051
00052 ViewContainerWidget* the_widget = dynamic_cast<ViewContainerWidget*>(temp_widget);
00053
00054 if(the_widget == 0)
00055 {
00056 QMessageBox::information(this, tr("Critical Error"),
00057 "Could not close the widget");
00058 }
00059
00060 view_id_container_type holded_views = the_widget->getHoldedViews();
00061
00062 view_id_container_type::const_iterator iterator = holded_views.begin();
00063
00064 while(iterator != holded_views.end())
00065 {
00066 lookup_map_.erase(*iterator);
00067 ++iterator;
00068 }
00069
00070 removeTab( currentIndex() );
00071 delete temp_widget;
00072
00073 std::cout << "close" << std::endl;
00074 }
00075
00076
00077
00078 int TabOrganizer::addTab(const std::vector<view_pointer_type>& view_vector,
00079 const QString& label)
00080 {
00081 ViewContainerWidget* view_container_widget =
00082 new ViewContainerWidget();
00083 view_container_widget->addViews(view_vector);
00084
00085 std::vector<view_pointer_type>::const_iterator iterator = view_vector.begin();
00086 while(iterator != view_vector.end())
00087 {
00088 lookup_map_[(*iterator)->getViewID()] = view_container_widget;
00089 ++iterator;
00090 }
00091
00092 QTabWidget::addTab(view_container_widget, label);
00093 this->setCurrentWidget(view_container_widget);
00094
00095 return 0;
00096 }
00097
00098
00099
00100 void TabOrganizer::openOverviewForVolume(dataset_key_type const& dataset_name)
00101 {
00102 view_pointer_type first_view;
00103 view_pointer_type second_view;
00104 view_pointer_type third_view;
00105
00106 try
00107 {
00108 first_view =
00109 Controller::getInstance().getViewOfDataset(
00110 Controller::getInstance().getViewTypeForDatasetSlice(
00111 dataset_name, SAGITTAL_SLICE), dataset_name);
00112
00113 second_view =
00114 Controller::getInstance().getViewOfDataset(
00115 Controller::getInstance().getViewTypeForDatasetSlice(
00116 dataset_name, CORONAL_SLICE), dataset_name);
00117
00118 third_view =
00119 Controller::getInstance().getViewOfDataset(
00120 Controller::getInstance().getViewTypeForDatasetSlice(
00121 dataset_name, AXIAL_SLICE), dataset_name);
00122 }
00123 catch(DatasetNotFoundException &exc)
00124 {
00125
00126 QMessageBox::information(this, tr("Error"),
00127 tr("Dataset not found Exception in getViewOfDataset"));
00128 return;
00129 }
00130
00131 std::vector<view_pointer_type> view_vector;
00132
00133 view_vector.push_back(first_view);
00134 view_vector.push_back(second_view);
00135 view_vector.push_back(third_view);
00136
00137 QString title = tr("Overview - ", "MainWindow") +
00138 QString(dataset_name.c_str());
00139
00140 addTab(view_vector, title);
00141 }
00142
00143
00144
00145 void TabOrganizer::openOverviewForImage(dataset_key_type const& dataset_name)
00146 {
00147 view_pointer_type image_view;
00148
00149 try
00150 {
00151 image_view =
00152 Controller::getInstance().getViewOfDataset(
00153 IMAGE_PIXEL_VIEW, dataset_name);
00154
00155 }
00156 catch(DatasetNotFoundException &exc)
00157 {
00158
00159 QMessageBox::information(this, tr("Error"),
00160 tr("Dataset not found Exception in getViewOfDataset"));
00161 return;
00162 }
00163
00164 std::vector<view_pointer_type> view_vector;
00165
00166 view_vector.push_back(image_view);
00167
00168 QString title = tr("Overview - ", "MainWindow") +
00169 QString(dataset_name.c_str());
00170
00171 addTab(view_vector, title);
00172 }
00173
00174
00175
00176 void TabOrganizer::closeTab(dataset_key_type const& dataset_name)
00177 {
00178 view_id_container_type dependend_view_ids;
00179 Controller::getInstance().getDependentViewIDsOfDataset(dataset_name, dependend_view_ids);
00180 view_id_container_type::const_iterator iterator = dependend_view_ids.begin();
00181 while(iterator != dependend_view_ids.end())
00182 {
00183 ViewContainerWidget* tempWidget = lookup_map_[*iterator];
00184 if(tempWidget == 0)
00185 {
00186 ++iterator;
00187 continue;
00188 }
00189
00190 if(indexOf(tempWidget) != -1)
00191 {
00192 removeTab(indexOf(tempWidget));
00193 delete tempWidget;
00194 }
00195 ++iterator;
00196 }
00197 }
00198 }