tab_organizer.cpp

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 }

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