• Main Page
  • Related Pages
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

src/DGVTable.cpp

Go to the documentation of this file.
00001 
00022 #include "DGVTable.h"
00023 
00024 #include <fstream>
00025 //#include <QtCore/QtDebug>
00026 
00027 DGVTable::DGVTable(QWidget *parent) : QTableWidget(parent)
00028 {
00029     createConnections();
00030 }
00031 
00032 DGVTable::~DGVTable()
00033 {
00034 
00035 }
00036 
00037 void DGVTable::setName(QString filename)
00038 {
00039     name = filename;
00040     setWindowTitle(strippedNamePrefix());
00041 }
00042 
00043 void DGVTable::setItem(int row, int column, tableType value)
00044 {
00045     QTableWidgetItem *item = NULL;
00046     QString tmp;
00047 
00048     tmp = tmp.setNum(value);
00049     item = new QTableWidgetItem();
00050     item->setText(tmp);
00051     QTableWidget::setItem(row,column,item);
00052     //tableItems.append(item);
00053 }
00054 
00055 void DGVTable::setItem(int row, int column, QString value)
00056 {
00057     QTableWidgetItem *item = NULL;
00058 
00059     item = new QTableWidgetItem();
00060     item->setText(value);
00061     QTableWidget::setItem(row,column,item);
00062     //tableItems.append(item);
00063 }
00064 
00065 tableType DGVTable::getItem(int x, int y)
00066 {
00067     QString tmp;
00068 
00069     tmp = QTableWidget::item(x,y)->text();
00070 
00071     return tmp.toDouble();
00072 }
00073 
00074 void DGVTable::zapSelection()
00075 {
00076     QList<QTableWidgetItem*> selection;
00077 
00078     selection = QTableWidget::selectedItems();
00079     for(int j = 0; j < selection.size(); j ++)
00080         selection[j]->setText("0");
00081 }
00082 
00083 void DGVTable::delSelection()
00084 {
00085     QList<QTableWidgetSelectionRange> selectedRange;
00086     int size = 0, start = 0;
00087 
00088     selectedRange = QTableWidget::selectedRanges();
00089 
00090     for(int j = 0; j < selectedRange.size(); j ++)
00091     {
00092         if(selectedRange[j].columnCount() < selectedRange[j].rowCount())
00093         {
00095             size = selectedRange[j].columnCount();
00096             start = selectedRange[j].leftColumn();
00097             /*QMessageBox::warning(this, "DGV",
00098                     "Do you wish to delete columns and all data within it?\n"
00099                     "Check the data Delimiters and Try opening the file again.");*/
00100             for(int j = start; j < size+start; j ++)
00101                 QTableWidget::removeColumn(j);
00102         }
00103         else
00104         {
00105             size = selectedRange[j].rowCount();
00106             start = selectedRange[j].topRow();
00107 
00108             for(int j = start; j < size+start; j ++)
00109                 QTableWidget::removeRow(j);
00110         }
00111     }
00112 }
00113 
00114 void DGVTable::plotSelection()
00115 {
00116     Array<Array<double,1>,1> selectedData; 
00117     Array<Array<double,1>,1> selectedDataX;
00118     QList<QTableWidgetItem*> selection;
00119     QList<QTableWidgetSelectionRange> selectedRange;
00120     DGVPlot *tmpPlot = NULL;
00121     int size = 0, start = 0, count = 0;
00122 
00124     selection = QTableWidget::selectedItems();
00126     selectedRange = QTableWidget::selectedRanges();
00128     selectedData.resizeAndPreserve(selectedRange.size());
00129     selectedDataX.resizeAndPreserve(selectedRange.size());
00132 
00133     cerr << "Bug Warning: If selections not appearing in plot, use Crtl key instead of Shift key.\n";
00135     for(int j = 0; j < selectedRange.size(); j ++)
00136     {
00138         if(selectedRange[j].columnCount() < selectedRange[j].rowCount())
00139         {
00140             size = selectedRange[j].rowCount();
00141             start = selectedRange[j].topRow();
00142         }
00143         else
00144         {
00145             size = selectedRange[j].columnCount();
00146             start = selectedRange[j].leftColumn();
00147         }
00148 
00149         selectedData(j).resizeAndPreserve(size);
00150         selectedDataX(j).resizeAndPreserve(size);
00151         for(int k = count; k < count+size; k ++)
00152         {
00153             selectedData(j)(k-count) = selection[k]->text().toDouble();
00154             selectedDataX(j)(k-count) = start+(k-count);
00155         }
00156         count += size;
00157     }
00158 
00159     tmpPlot = new DGVPlot(this);
00160     tmpPlot->createCurvePlots(selectedDataX,selectedData,"Selection Plot");
00161 
00162     emit plotAvailable(tmpPlot);
00163 }
00164 
00165 void DGVTable::scanSelection()
00166 {
00167     //DGVAnimate *ani = new DGVAnimate(this);
00168     /*QList<QTableWidgetSelectionRange> selectedRange;
00169     int size = 0, start = 0;
00170 
00171     selectedRange = QTableWidget::selectedRanges();
00172 
00173     for(int j = 0; j < selectedRange.size(); j ++)
00174     {
00175         if(selectedRange[j].columnCount() < selectedRange[j].rowCount())
00176         {
00178             size = selectedRange[j].rowCount();
00179             start = selectedRange[j].topRow();
00180 
00181         }
00182         else
00183         {
00184             size = selectedRange[j].columnCount();
00185             start = selectedRange[j].leftColumn();
00186 
00187         }
00188     }*/
00189 
00190     //emit animAvailable(ani);
00191 }
00192 
00193 void DGVTable::saveSelection()
00194 {
00195     QFileDialog *fileSaver = new QFileDialog(this);
00196     QList<QTableWidgetItem*> selection;
00197     QList<QTableWidgetSelectionRange> selectedRange;
00198     int size = 0, start = 0, count = 0;
00199 
00200     QString filename = fileSaver->getSaveFileName(this,
00201                            tr("Select File Name to Save"),
00202                            ".",
00203                            tr("Data Files (*.csv)"));
00204 
00205     if (!filename.isEmpty())
00206     {
00208         selection = QTableWidget::selectedItems();
00210         selectedRange = QTableWidget::selectedRanges();
00211 
00214 
00215         cerr << "Bug Warning: If selections not appearing in plot, use Crtl key instead of Shift key.\n";
00216 
00217         QFile file("test.csv");
00218         if(!file.open(QIODevice::WriteOnly | QIODevice::Text))
00219              return;
00220         QTextStream *out = new QTextStream(&file);
00221 
00222         for(int j = 0; j < selectedRange.size(); j ++)
00223         {
00225             if(selectedRange[j].columnCount() < selectedRange[j].rowCount())
00226             {
00227                 size = selectedRange[j].rowCount();
00228                 start = selectedRange[j].topRow();
00229             }
00230             else
00231             {
00232                 size = selectedRange[j].columnCount();
00233                 start = selectedRange[j].leftColumn();
00234             }
00235 
00236             for(int k = count; k < count+size; k ++)
00237                 (*out) << selection[k]->text().toDouble() << ", ";
00238             (*out) << endl;
00239 
00240             count += size;
00241         }
00242 
00243         delete out;
00244         file.close();
00245     }
00246 }
00247 
00248 void DGVTable::saveAll()
00249 {
00250     QFileDialog *fileSaver = new QFileDialog(this);
00251     QString filename = fileSaver->getSaveFileName(this,
00252                            tr("Select File Name to Save"),
00253                            ".",
00254                            tr("Data Files (*.csv)"));
00255 
00256     if (!filename.isEmpty())
00257     {
00258         QFile file(filename);
00259 
00260         if(!file.open(QIODevice::WriteOnly | QIODevice::Text))
00261              return;
00262 
00263         QTextStream *out = new QTextStream(&file);
00264 
00265         for(int j = 0; j < QTableWidget::rowCount(); j ++)
00266         {
00267             for(int k = 0; k < QTableWidget::columnCount(); k ++)
00268                 (*out) << item(j,k)->text().toDouble() << ", ";
00269             (*out) << endl;
00270         }
00271 
00272         delete out;
00273         file.close();
00274     }
00275 }
00276 
00277 bool DGVTable::loadCSV(const QString filename)
00278 {
00279     int cols = 0;
00280     QFile file(filename);
00281     QString line;
00282     tableType tmp = 0;
00283     char comma;
00284 
00285     if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
00286          return false;
00287 
00290     QTextStream *in = new QTextStream(&file);
00291     line = in->readLine(); 
00292     line.simplified();
00293 
00294     if(line.contains(","))
00295         cols = line.count(",");
00296     else if(line.contains(" "))
00297         cols = line.count(" ") + 1;
00298     else
00299         return false;
00300 
00301     delete in;
00302     file.reset(); 
00303     in = new QTextStream(&file);
00304 
00305     //cerr << "POS: " << file.pos() << endl;
00306     if(cols > 0)
00307     {
00308         setColumnCount(cols);
00309         while(!in->atEnd())
00310         {
00311             insertRow(QTableWidget::rowCount());
00312             for(int k = 0; k < cols; k ++)
00313             {
00314                 (*in) >> tmp;
00315                 (*in) >> comma;
00316                 //cerr << "j: " << QTableWidget::rowCount()-1 << " k: " << k << " Value: " << tmp << endl;
00317                 setItem(QTableWidget::rowCount()-1,k,tmp);
00318             }
00319         }
00320     }
00321 
00322     delete in;
00323     return true;
00324 }
00325 
00326 void DGVTable::setData(Array<tableType,2> &values)
00327 {
00328     setRowCount(values.rows());
00329     setColumnCount(values.cols());
00330     for(int j = 0; j < values.rows(); j ++)
00331         for(int k = 0; k < values.cols(); k ++)
00332             setItem(j,k,values(j,k));
00333 }
00334 
00335 Array<tableType,2>& DGVTable::data()
00336 {
00337     tableData.resize(QTableWidget::rowCount(),QTableWidget::columnCount());
00338 
00339     for(int j = 0; j < QTableWidget::rowCount(); j ++)
00340         for(int k = 0; k < QTableWidget::columnCount(); k ++)
00341             tableData(j,k) = getItem(j,k);
00342 
00343     return tableData;
00344 }
00345 
00346 QString DGVTable::strippedName()
00347 {
00348     return QFileInfo(name).fileName();
00349 }
00350 
00351 QString DGVTable::strippedNamePrefix()
00352 {
00353     return "Table: " + QFileInfo(name).fileName();
00354 }
00355 
00356 void DGVTable::contextMenuEvent(QContextMenuEvent *event)
00357 {
00358     QMenu menu(this);
00359 
00360     zapAct = menu.addAction(tr("&Zap"));
00361     zapAct->setShortcut(tr("Ctrl+Shift+z"));
00362 
00363     delAct = menu.addAction(tr("&Delete"));
00364     delAct->setShortcut(tr("Ctrl+Shift+d"));
00365 
00366     menu.addSeparator();
00367     plotAct = menu.addAction(tr("&Plot"));
00368     plotAct->setShortcut(tr("Ctrl+Shift+p"));
00369 
00370     scanAct = menu.addAction(tr("&Scan"));
00371     scanAct->setShortcut(tr("Ctrl+Shift+a"));
00372 
00373     menu.addSeparator();
00374     saveAct = menu.addAction(tr("&Save Selection"));
00375     saveAct->setShortcut(tr("Ctrl+Shift+s"));
00376     saveAllAct = menu.addAction(tr("Save &Entire Table"));
00377     saveAllAct->setShortcut(tr("Ctrl+Shift+e"));
00378     closeAct = menu.addAction(tr("&Close"));
00379     closeAct->setShortcut(tr("Ctrl+Shift+c"));
00380 
00381     connect(zapAct, SIGNAL(triggered()), this, SLOT(zapSelection()));
00382     connect(delAct, SIGNAL(triggered()), this, SLOT(delSelection()));
00383     connect(plotAct, SIGNAL(triggered()), this, SLOT(plotSelection()));
00384     connect(scanAct, SIGNAL(triggered()), this, SLOT(scanSelection()));
00385     connect(saveAct, SIGNAL(triggered()), this, SLOT(saveSelection()));
00386     connect(saveAllAct, SIGNAL(triggered()), this, SLOT(saveAll()));
00387     connect(closeAct, SIGNAL(triggered()), this, SLOT(close()));
00388 
00389     menu.exec(event->globalPos());
00390 }
00391 
00392 void DGVTable::createConnections()
00393 {
00394 
00395 }

Generated on Wed Sep 8 2010 01:36:51 for DGV by  doxygen 1.7.1