diff --git a/QLop.pro b/QLop.pro --- a/QLop.pro +++ b/QLop.pro @@ -53,7 +53,8 @@ SOURCES += src/main.cpp\ src/QCustomPlot/qcpdocumentobject.cpp \ src/Core/Widgets/filebrowser.cpp \ src/Core/Widgets/filesystemmodel.cpp \ - src/Core/Widgets/qcustomplotvect.cpp + src/Core/Widgets/qcustomplotvect.cpp \ + src/Core/qlopdatabase.cpp HEADERS += src/mainwindow.h \ src/SocExplorerPlot.h \ @@ -81,7 +82,8 @@ HEADERS += src/mainwindow.h \ src/QCustomPlot/qcpdocumentobject.h \ src/Core/Widgets/filebrowser.h \ src/Core/Widgets/filesystemmodel.h \ - src/Core/Widgets/qcustomplotvect.h + src/Core/Widgets/qcustomplotvect.h \ + src/Core/qlopdatabase.h FORMS += src/mainwindow.ui \ src/Core/Widgets/downloadhistory.ui \ diff --git a/src/Cassini/cassinidatafile.cpp b/src/Cassini/cassinidatafile.cpp --- a/src/Cassini/cassinidatafile.cpp +++ b/src/Cassini/cassinidatafile.cpp @@ -203,9 +203,9 @@ void CassiniDataFile::readFile() QVector *ch2=new QVector(lineCnt); QVector *ch3=new QVector(lineCnt); QLopDataList data; - QLopData* ch1V=new QLopData(); - QLopData* ch2V=new QLopData(); - QLopData* ch3V=new QLopData(); + QLopDataVector* ch1V=new QLopDataVector(); + QLopDataVector* ch2V=new QLopDataVector(); + QLopDataVector* ch3V=new QLopDataVector(); ch1V->data=ch1; ch2V->data=ch2; ch3V->data=ch3; @@ -281,9 +281,9 @@ void CassiniDataFile::writeFile() { if(m_data.count()==3) { - QLopData* ch1V=m_data.at(0); - QLopData* ch2V=m_data.at(1); - QLopData* ch3V=m_data.at(2); + QLopDataVector* ch1V=(QLopDataVector*)m_data.at(0); + QLopDataVector* ch2V=(QLopDataVector*)m_data.at(1); + QLopDataVector* ch3V=(QLopDataVector*)m_data.at(2); if(ch1V->data->count()==ch2V->data->count() && ch1V->data->count()==ch3V->data->count()) { for(int i=0;idata->count();i++) diff --git a/src/Cassini/cassinitools.cpp b/src/Cassini/cassinitools.cpp --- a/src/Cassini/cassinitools.cpp +++ b/src/Cassini/cassinitools.cpp @@ -154,7 +154,7 @@ void CassiniTools::export_view(int PID) QLopDataList vectors; for(int i=0;igraphCount();i++) { - QLopData* vect = new QLopData(); + QLopDataVector* vect = new QLopDataVector(); vect->data = plot->getVisibleData(i); vectors.append(vect); } @@ -175,7 +175,7 @@ void CassiniTools::export_view_Predefine QLopDataList vectors; for(int i=0;igraphCount();i++) { - QLopData* vect = new QLopData(); + QLopDataVector* vect = new QLopDataVector(); vect->data = plot->getVisibleData(i); vectors.append(vect); } @@ -196,16 +196,16 @@ void CassiniTools::compute_fft_on_view(i QLopDataList vectors; for(int i=0;igraphCount();i++) { - QLopData* vect = new QLopData(); + QLopDataVector* vect = new QLopDataVector(); vect->data = plot->getVisibleData(i); vectors.append(vect); } if(vectors.count()==3) { - QLopData* ch1V=vectors.at(0); - QLopData* ch2V=vectors.at(1); - QLopData* ch3V=vectors.at(2); - QLopData* FFTout=new QLopData(); + QLopDataVector* ch1V=(QLopDataVector*)vectors.at(0); + QLopDataVector* ch2V=(QLopDataVector*)vectors.at(1); + QLopDataVector* ch3V=(QLopDataVector*)vectors.at(2); + QLopDataVector* FFTout=new QLopDataVector(); if(ch1V->data->count()==ch2V->data->count() && ch1V->data->count()==ch3V->data->count()) { @@ -297,7 +297,7 @@ void CassiniTools::dataReady(QLopDataLis pen.setColor(QLopColours[i%QLopColoursCount]); plot->setGraphPen(i,pen); plot->setGraphName(i,data.at(i)->name+"("+data.at(i)->unit+")"); - plot->setGraphData(i,data.at(i)->data,false); + plot->setGraphData(i,((QLopDataVector*)data.at(i))->data,false); } plot->rescaleAxis(); plot->replot(); diff --git a/src/Cassini/cassinitoolsgui.ui b/src/Cassini/cassinitoolsgui.ui --- a/src/Cassini/cassinitoolsgui.ui +++ b/src/Cassini/cassinitoolsgui.ui @@ -46,6 +46,11 @@ + + + 7 + + @@ -53,6 +58,12 @@ :/img/Gnome-list-add.svg:/img/Gnome-list-add.svg + + + 16 + 16 + + false @@ -66,7 +77,7 @@ 40 - 20 + 8 diff --git a/src/Core/Widgets/filebrowser.cpp b/src/Core/Widgets/filebrowser.cpp --- a/src/Core/Widgets/filebrowser.cpp +++ b/src/Core/Widgets/filebrowser.cpp @@ -29,6 +29,7 @@ FileBrowser::FileBrowser(QWidget *parent QDockWidget(parent), ui(new Ui::FileBrowser) { + this->doubleClickEater = new DoubleClickEater(); ui->setupUi(this); this->model = new FileSystemModel(this); this->model->setRootPath(QDir::currentPath()); @@ -38,6 +39,7 @@ FileBrowser::FileBrowser(QWidget *parent this->cd(model->rootPath()); connect(this->view,SIGNAL(clicked(QModelIndex)),this,SLOT(clicked(QModelIndex))); connect(this->view,SIGNAL(doubleClicked(QModelIndex)),this,SLOT(doubleClicked(QModelIndex))); + connect(this->view,SIGNAL(activated(QModelIndex)),this,SLOT(activated(QModelIndex))); connect(this->ui->ListViewQpb,SIGNAL(clicked()),this,SLOT(changeToListView())); connect(this->ui->TreeViewQpb,SIGNAL(clicked()),this,SLOT(changeToTreeView())); connect(this->ui->parentDirQpb,SIGNAL(clicked()),this,SLOT(parentDir())); @@ -49,6 +51,9 @@ FileBrowser::FileBrowser(QWidget *parent this->pathCompleter = new QCompleter(this->model,this); this->ui->pathLineEdit->setCompleter(pathCompleter); this->pathLineEditEnterEditMode(false); + this->setFocusPolicy(Qt::StrongFocus); + this->ui->pathLineEdit->installEventFilter(this->doubleClickEater); + connect(this->doubleClickEater,SIGNAL(doubleClicked()),this,SLOT(pathLineEditDblClicked())); } FileBrowser::~FileBrowser() @@ -115,6 +120,11 @@ void FileBrowser::doubleClicked(QModelIn } } +void FileBrowser::activated(const QModelIndex &index) +{ + doubleClicked(index); +} + void FileBrowser::parentDir() { this->cd(model->rootPath()+"/.."); @@ -127,6 +137,12 @@ void FileBrowser::cd(const QString &newP this->ui->pathLineEdit->setText(model->rootPath()); } +void FileBrowser::pathLineEditDblClicked() +{ + if(this->ui->pathLineEdit->isReadOnly()) + pathLineEditEnterEditMode(true); +} + void FileBrowser::changeEvent(QEvent *e) { @@ -152,11 +168,20 @@ void FileBrowser::keyPressEvent(QKeyEven } break; case Qt::Key_Return: - pathLineEditEnterEditMode(false); - if(QFile::exists(this->ui->pathLineEdit->text())) + if(!this->view->hasFocus()) { - this->cd(this->ui->pathLineEdit->text()); - e->accept(); + if(QFile::exists(this->ui->pathLineEdit->text())) + { + this->cd(this->ui->pathLineEdit->text()); + e->accept(); + } + pathLineEditEnterEditMode(false); + } + break; + case Qt::Key_Backspace: + if(this->view->hasFocus()) + { + parentDir(); } break; default: @@ -173,3 +198,17 @@ void FileBrowser::pathLineEditEnterEditM if(enter) this->ui->pathLineEdit->setFocus(); } + + +bool DoubleClickEater::eventFilter(QObject *obj, QEvent *event) +{ + if (event->type() == QEvent::MouseButtonDblClick) + { + emit doubleClicked(); + return true; + } else + { + // standard event processing + return QObject::eventFilter(obj, event); + } +} diff --git a/src/Core/Widgets/filebrowser.h b/src/Core/Widgets/filebrowser.h --- a/src/Core/Widgets/filebrowser.h +++ b/src/Core/Widgets/filebrowser.h @@ -34,6 +34,21 @@ namespace Ui { class FileBrowser; } +class DoubleClickEater : public QObject +{ + Q_OBJECT +public: + DoubleClickEater(){} + ~DoubleClickEater(){} +signals: + void doubleClicked(); +protected: + bool eventFilter(QObject *obj, QEvent *event); +}; + + + + class FileBrowser : public QDockWidget { Q_OBJECT @@ -50,8 +65,10 @@ private slots: void changeToListView(); void clicked(QModelIndex index); void doubleClicked(QModelIndex index); + void activated(const QModelIndex & index); void parentDir(); void cd(const QString& newPath); + void pathLineEditDblClicked(); protected: void changeEvent(QEvent *e); void keyPressEvent(QKeyEvent *e); @@ -61,6 +78,7 @@ private: FileSystemModel* model; QAbstractItemView* view; QCompleter* pathCompleter; + DoubleClickEater* doubleClickEater; }; #endif // FILEBROWSER_H diff --git a/src/Core/qlopdata.cpp b/src/Core/qlopdata.cpp --- a/src/Core/qlopdata.cpp +++ b/src/Core/qlopdata.cpp @@ -24,11 +24,24 @@ QLopData::QLopData(QObject *parent) : QObject(parent) { - + this->unit = ""; + this->source = "Not set"; + this->type = QLopData::None; } QLopData::~QLopData() { +// delete data; +} + + + +QLopDataVector::QLopDataVector(QObject *parent) +{ + this->type = QLopData::Vector; +} + +QLopDataVector::~QLopDataVector() +{ delete data; } - diff --git a/src/Core/qlopdata.h b/src/Core/qlopdata.h --- a/src/Core/qlopdata.h +++ b/src/Core/qlopdata.h @@ -41,13 +41,35 @@ class QLopData : public QObject { Q_OBJECT public: + typedef enum QLopDataType + { + Scalar=0, + Vector=1, + Matrix=2, + None=-1, + } + QLopDataType; explicit QLopData(QObject *parent = 0); ~QLopData(); QString name; + QString source; QString unit; + QLopDataType type; + int ID; +signals: + void dataChanged(); +public slots: +private: +}; + +class QLopDataVector : public QLopData +{ + Q_OBJECT +public: + explicit QLopDataVector(QObject *parent = 0); + ~QLopDataVector(); QVector* data; signals: - void dataChanged(); public slots: private: }; diff --git a/src/Core/qlopdatabase.cpp b/src/Core/qlopdatabase.cpp new file mode 100644 --- /dev/null +++ b/src/Core/qlopdatabase.cpp @@ -0,0 +1,83 @@ +#include "qlopdatabase.h" + +QList* QLopDataBase::m_dataBase=NULL; +QLopDataBase* QLopDataBase::_self=NULL; + +#define INIT() \ + if(Q_UNLIKELY(_self==NULL))\ + {\ + init();\ + } + +QLopDataBase::QLopDataBase(QObject *parent) : QObject(parent) +{ + this->m_dataBase = new QList(); +} + +QLopDataBase::~QLopDataBase() +{ + +} + +void QLopDataBase::init() +{ + _self=new QLopDataBase(); +} + +int QLopDataBase::addData(QLopData *data) +{ + INIT(); + if(!m_dataBase->contains(data)) + { + m_dataBase->append(data); + return 1; + } + return 0; +} + +int QLopDataBase::addData(const QLopDataList& data) +{ + INIT(); + int addedData=0; + for (int i = 0; i < data.count(); i++) + { + addedData += addData(data.at(i)); + } + return addedData; +} + +QLopDataBase *QLopDataBase::self() +{ + INIT(); + return _self; +} + +int QLopDataBase::count() +{ + return m_dataBase->count(); +} + +QLopData *QLopDataBase::getData(const QString &name) +{ + for (int i = 0; i < m_dataBase->count(); i++) + { + if(Q_UNLIKELY(m_dataBase->at(i)->name==name)) + { + return m_dataBase->at(i); + } + } + return NULL; +} + +QLopData *QLopDataBase::getData(int ID) +{ + for (int i = 0; i < m_dataBase->count(); i++) + { + if(Q_UNLIKELY(m_dataBase->at(i)->ID==ID)) + { + return m_dataBase->at(i); + } + } + return NULL; +} + diff --git a/src/Core/qlopdatabase.h b/src/Core/qlopdatabase.h new file mode 100644 --- /dev/null +++ b/src/Core/qlopdatabase.h @@ -0,0 +1,29 @@ +#ifndef QLOPDATABASE_H +#define QLOPDATABASE_H + +#include +#include +#include + +class QLopDataBase : public QObject +{ + Q_OBJECT + explicit QLopDataBase(QObject *parent = 0); + ~QLopDataBase(); + static QLopDataBase* _self; +public: + static void init(); + static int addData(QLopData* data); + static int addData(const QLopDataList &data); + static QLopDataBase* self(); + static int count(); + static QLopData* getData(const QString& name); + static QLopData* getData(int ID); +signals: + +public slots: +private: + static QList* m_dataBase; +}; + +#endif // QLOPDATABASE_H