PickTable.cxx

Go to the documentation of this file.
00001 
00012 #include "PickTable.h"
00013 
00014 #include "controllers/DisplayController.h"
00015 #include "datareps/DataRep.h"
00016 #include "datasrcs/DataSourceController.h"
00017 #include "datasrcs/NTuple.h"
00018 #include "datasrcs/NTupleSorter.h"
00019 #include "graphics/SymbolType.h"
00020 #include "plotters/PlotterBase.h"
00021 
00022 #if QT_VERSION < 0x040000
00023 #include <qheader.h>
00024 #include <qlistview.h>
00025 #else
00026 #include <q3header.h>
00027 #include <q3listview.h>
00028 #endif
00029 
00030 #include <qlineedit.h>
00031 #include <qpushbutton.h>
00032 #include <qlabel.h>
00033 #include <qcheckbox.h>
00034 
00035 using std::string;
00036 using std::vector;
00037 
00038 using namespace hippodraw;
00039 
00040 PickTable::
00041 PickTable ( PlotterBase * plotter )
00042 {
00043   m_target = plotter;
00044 
00045   NTuple * ntuple = plotter -> createPickTuple ();
00046   m_sorter = new NTupleSorter ( ntuple );
00047 
00048   const string & name = ntuple -> getName ();
00049   m_title->setText ( name.c_str() );
00050 
00051   const DataRep * rep = plotter->getDataRep ( 0 );
00052   const string & type = rep -> name ();
00053 
00054   string text = "Plot type : ";
00055   text += type.c_str();
00056   m_type->setText ( text.c_str() );
00057 
00058   const vector < string > & labels = ntuple -> getLabels ();
00059   m_pick_table->setColumnText ( 1, labels[1].c_str() );
00060   m_pick_table->setColumnText ( 2, labels[2].c_str() );
00061   unsigned int size = ntuple -> columns ();
00062   m_column = size;
00063   if ( size == 3 ) {
00064     m_pick_table -> removeColumn ( 3 );
00065     zLineEdit -> setEnabled ( false );
00066     wLineEdit -> setEnabled ( false );
00067   }
00068   else {
00069     m_pick_table -> setColumnText ( 3, labels[3].c_str() );
00070     if ( size == 5 ) {
00071       const QString & str ( labels[4].c_str() );
00072       m_pick_table -> addColumn ( str );
00073     }
00074     else wLineEdit -> setEnabled ( false );
00075   }
00076 
00077   DataSourceController::instance()->registerNTuple ( ntuple );
00078 
00079 #if QT_VERSION < 0x040000
00080   QHeader * header = m_pick_table->header();
00081 #else
00082   Q3Header * header = m_pick_table->header();
00083 #endif
00084   connect ( header, SIGNAL ( clicked (int) ), 
00085             this, SLOT( listSorted ( int ) ) );
00086   m_pick_table->setSorting ( -1 );
00087   m_pick_table->setShowSortIndicator ( true );
00088   m_delete -> setEnabled ( false );
00089 
00090   // Picked points are show by default.
00091   addDataRep();
00092 }
00093 
00094 void
00095 PickTable::
00096 listSorted ( int i )
00097 {
00098   m_sorter -> setSorting ( i );
00099   m_sorter -> sort ( );
00100 
00101 #if QT_VERSION < 0x040000
00102   QListViewItem * item = m_pick_table ->selectedItem ();
00103 #else
00104   Q3ListViewItem * item = m_pick_table ->selectedItem ();
00105 #endif
00106   QString text = item -> text ( 0 );
00107   unsigned int selected = text.toUInt ();
00108 
00109   refreshItems ( selected );
00110 }
00111 
00112 void PickTable::clear()
00113 {
00114   m_pick_table->clear();
00115   m_sorter->clear();
00116 }
00117 
00118 void
00119 PickTable::
00120 addItem ( std::vector < double > & v )
00121 {
00122   unsigned int row = m_sorter -> rows ();
00123   v[0] = row;
00124   m_sorter -> addRow ( v );
00125 
00126   refreshItems ( row );
00127 }
00128 
00129 void
00130 PickTable::
00131 refreshItems ( unsigned int select )
00132 {
00133   m_pick_table -> clear();
00134 
00135   unsigned int row = m_sorter->rows ();
00136   bool yes = row > 0;
00137   m_delete -> setEnabled ( yes );
00138 
00139   while ( row-- != 0 ) {
00140     const vector < double > & vec = m_sorter->getRow ( row );
00141     unsigned int current = static_cast < unsigned int > ( vec[0] );
00142 #if QT_VERSION < 0x040000
00143     QListViewItem * item = new QListViewItem ( m_pick_table );
00144 #else
00145     Q3ListViewItem * item = new Q3ListViewItem ( m_pick_table );
00146 #endif
00147     unsigned int size = vec.size();
00148 
00149     for ( unsigned int i = 0; i < size; i++ ) {
00150       item -> setText ( i, QString ( "%1" ).arg ( vec[i] ) );
00151     }
00152 
00153     m_pick_table -> insertItem ( item );
00154 
00155     if ( select == current ) {
00156       m_pick_table -> setSelected ( item, true );
00157       m_pick_table -> ensureItemVisible ( item );
00158     }
00159   }
00160 }
00161 
00162 unsigned int
00163 PickTable::
00164 #if QT_VERSION < 0x040000
00165 indexOf ( QListViewItem * target )
00166 #else
00167 indexOf ( Q3ListViewItem * target )
00168 #endif
00169 {
00170   unsigned int index = 0;
00171 #if QT_VERSION < 0x040000
00172   QListViewItem * item = m_pick_table -> firstChild ();
00173 #else
00174   Q3ListViewItem * item = m_pick_table -> firstChild ();
00175 #endif
00176   while ( item != target ) {
00177     index++;
00178     item = item->nextSibling();
00179     if ( item == 0 ) break;
00180   }
00181 
00182   return index;
00183 }
00184 
00185 void PickTable::deleteSelectedItem ()
00186 {
00187 #if QT_VERSION < 0x040000
00188   QListViewItem * item = m_pick_table->selectedItem ();
00189 #else
00190   Q3ListViewItem * item = m_pick_table->selectedItem ();
00191 #endif
00192   if ( item != 0 ) {
00193     unsigned int index = indexOf ( item );
00194 
00195     m_sorter->eraseRow ( index );
00196 
00197     unsigned int row = index == 0 ? 0 : index - 1;
00198     refreshItems ( row );
00199   }
00200 }
00201 
00202 void
00203 PickTable::
00204 addDataRep()
00205 {
00206   const string plotTypeStr ( "Scatter Plot" );  
00207   NTuple * ntuple = m_sorter -> getNTuple ();
00208   const vector < string > & labels = ntuple -> getLabels ();
00209   vector < string > bindings;
00210   bindings.push_back ( labels[1] );
00211   bindings.push_back ( labels[2] );
00212   if ( labels.size() == 4 ) {
00213     if ( labels[3] == "Density" ) {
00214       bindings[1] = "Density";
00215     }
00216   }
00217 
00218   DisplayController * controller = DisplayController::instance();
00219   DataRep * rep 
00220     = controller -> addDataRep ( m_target, plotTypeStr, 
00221                                  ntuple, bindings );
00222   m_datarep = rep;
00223 
00224   const Color red ( Color::red );
00225   rep -> setRepColor ( red );
00226   rep -> setRepStyle ( Symbol::CIRCLE );
00227   rep -> setRepSize ( 6.0 );
00228 }
00229 
00230 void
00231 PickTable::
00232 m_pick_table_selectionChanged ()
00233 {
00234 #if QT_VERSION < 0x040000
00235   QListViewItem * item = m_pick_table -> selectedItem ();
00236 #else
00237   Q3ListViewItem * item = m_pick_table -> selectedItem ();
00238 #endif
00239   bool yes = item != 0;
00240 
00241   m_delete -> setEnabled ( yes );
00242 }
00243 
00244 NTuple *
00245 PickTable::
00246 getPickTable () const
00247 {
00248   NTuple * ntuple = m_sorter -> getNTuple ();
00249   return ntuple;
00250 }
00251 
00252 void
00253 PickTable::
00254 addEntry()
00255 {
00256   vector <double> new_entry;
00257   double x=xLineEdit->text().toDouble();
00258   double y=yLineEdit->text().toDouble();
00259   new_entry.push_back(3.0);
00260   new_entry.push_back(x);
00261   new_entry.push_back(y);
00262   
00263   if ( m_column > 3 ){
00264     double z=zLineEdit->text().toDouble();
00265     new_entry.push_back(z);
00266   }
00267   if ( m_column == 5 ){
00268     double w=wLineEdit->text().toDouble();
00269     new_entry.push_back(w);
00270   }
00271 
00272   addItem(new_entry);
00273 }
00274 
00275 void
00276 PickTable::
00277 pickedCheckBoxClicked()
00278 {
00279   bool show = m_pickedCheckBox->isChecked();
00280   if (show) addDataRep();
00281   else m_target -> removeDataRep ( m_datarep );
00282 }

Generated for HippoDraw Class Library by doxygen