diff --git a/QLop.pro b/QLop.pro --- a/QLop.pro +++ b/QLop.pro @@ -9,6 +9,10 @@ CONFIG += pythonqt greaterThan(QT_MAJOR_VERSION, 4): QT += widgets printsupport +MOC_DIR = moc +UI_DIR = ui +OBJECTS_DIR = obj + DESTDIR =./bin TARGET = QLop @@ -21,12 +25,8 @@ INCLUDEPATH += src/QCustomPlot \ src/Core src/Core/Widgets \ src/Core/Widgets/PyWdgt -QMAKE_CXXFLAGS_RELEASE += -O5 -fopenmp -march=corei7-avx -mtune=corei7-avx -mavx -QMAKE_LFLAGS_RELEASE += -O5 -fopenmp -march=corei7-avx -mtune=corei7-avx -mavx - -QMAKE_CXXFLAGS_DEBUG += -O0 -fopenmp -march=corei7-avx -mtune=corei7-avx -mavx -QMAKE_LFLAGS_DEBUG += -O0 -fopenmp -march=corei7-avx -mtune=corei7-avx -mavx - +QMAKE_CXXFLAGS += -O5 -fopenmp +QMAKE_LFLAGS += -O5 -fopenmp SOURCES += src/main.cpp\ src/mainwindow.cpp \ @@ -54,7 +54,9 @@ SOURCES += src/main.cpp\ src/Core/Widgets/filebrowser.cpp \ src/Core/Widgets/filesystemmodel.cpp \ src/Core/Widgets/qcustomplotvect.cpp \ - src/Core/qlopdatabase.cpp + src/Core/qlopdatabase.cpp \ + src/Core/Widgets/qlopdatabaseviewer.cpp \ + src/Core/Widgets/qlopdatabaseviewermodel.cpp HEADERS += src/mainwindow.h \ src/SocExplorerPlot.h \ @@ -83,7 +85,9 @@ HEADERS += src/mainwindow.h \ src/Core/Widgets/filebrowser.h \ src/Core/Widgets/filesystemmodel.h \ src/Core/Widgets/qcustomplotvect.h \ - src/Core/qlopdatabase.h + src/Core/qlopdatabase.h \ + src/Core/Widgets/qlopdatabaseviewer.h \ + src/Core/Widgets/qlopdatabaseviewermodel.h FORMS += src/mainwindow.ui \ src/Core/Widgets/downloadhistory.ui \ @@ -91,7 +95,8 @@ FORMS += src/mainwindow.ui \ src/Cassini/cassinidatadownloader.ui \ src/Cassini/cassiniindexfileviewer.ui \ src/Cassini/cassinitoolsgui.ui \ - src/Core/Widgets/filebrowser.ui + src/Core/Widgets/filebrowser.ui \ + src/Core/Widgets/qlopdatabaseviewer.ui RESOURCES += \ resources/qlop.qrc @@ -107,6 +112,28 @@ unix { DEFINES += UNIX } +unix{ + target.path = /usr/bin + INSTALLS += target +} + + +unix{ + QLopLauncher.path = /usr/share/applications/ + QLopLauncher.files = linux/QLop.desktop + QLopAppData.path = /usr/share/appdata/ + QLopAppData.files = linux/QLop.appdata.xml + share.path = /usr/share/QLop + share.files = resources/QLop.svg \ + resources/QLop.png + + INSTALLS+= QLopLauncher share QLopAppData +} + DISTFILES += \ src/Core/pythongenerator.sh \ - src/Core/pythonQtgeneratorCfg.txt + src/Core/pythonQtgeneratorCfg.txt \ + linux/QLop.spec \ + linux/QLop.desktop \ + linux/QLop.appdata.xml + diff --git a/linux/QLop.appdata.xml b/linux/QLop.appdata.xml new file mode 100644 --- /dev/null +++ b/linux/QLop.appdata.xml @@ -0,0 +1,19 @@ + + + + QLop.desktop + CC0-1.0 + GPL-2.0+ + QLop + QLop is an interactive plotting software. + +

+ QLop is an interactive plotting software. +

+
+ + https://hephaistos.lpp.polytechnique.fr/redmine/attachments/download/384/SocExplorer_ScreenShot1.png + + https://hephaistos.lpp.polytechnique.fr/redmine/projects/qlop + alexis.jeandet@member.fsf.org +
diff --git a/linux/QLop.desktop b/linux/QLop.desktop new file mode 100644 --- /dev/null +++ b/linux/QLop.desktop @@ -0,0 +1,17 @@ +[Desktop Entry] +Version=1.0 +Name=QLop +Name[en_US]=QLop + +Type=Application +GenericName=QLop + +Comment=QLop is an interactive plotting software. + +Exec=QLop -e %U +Icon=/usr/share/QLop/QLop.png +Terminal=false + +Categories=Qt;Education;Science; + +MimeType=text/x-python; diff --git a/linux/QLop.spec b/linux/QLop.spec new file mode 100644 --- /dev/null +++ b/linux/QLop.spec @@ -0,0 +1,286 @@ +%global upstream_name qlop-0.1-1 + +Name: qlop +Version: 0.1 +Release: 1%{?dist} +Summary: QLop is an interactive plotting software, this is an early development preview of what this software will be. +Group: Development/Tools +License: GPLv2+ +URL: https://hephaistos.lpp.polytechnique.fr/redmine/projects/qlop +Source0: https://hephaistos.lpp.polytechnique.fr/redmine/attachments/download/376/%{upstream_name}.zip + +BuildRequires: python2-devel +BuildRequires: qt5-qtbase-devel +BuildRequires: qt5-qtwebkit-devel +BuildRequires: qt5-qttools-static +BuildRequires: qt5-qttools-devel +BuildRequires: qt5-qtsvg-devel +BuildRequires: qt5-qtxmlpatterns-devel +BuildRequires: qt5-qtmultimedia-devel +BuildRequires: qt5-pythonqt-devel +BuildRequires: appdata-tools +BuildRequires: desktop-file-utils +BuildRequires: fftw-devel + +Requires(post): python2 +Requires(post): qt5-qtbase +Requires(post): qt5-qtwebkit +Requires(post): qt5-qtsvg +Requires(post): qt5-qtxmlpatterns +Requires(post): qt5-pythonqt +Requires(post): fftw + +Provides: qlop = 0.1-1 + +%description +QLop is an interactive plotting software, this is an early development preview of what this software will be. + +%prep +%setup -q -n %{upstream_name} + + + +%build +%{_qt5_qmake} + +make %{?_smp_mflags} + +%install +make install INSTALL_ROOT=%{buildroot} +#appdata-validate --nonet %{buildroot}/%{_datadir}/appdata/QLop.appdata.xml +#desktop-file-validate $RPM_BUILD_ROOT%{_datadir}/applications/QLop.desktop + +%post -p /sbin/ldconfig + +%postun -p /sbin/ldconfig + +%files +/etc/QLop/python/PygmentsHighlighter.py +/etc/QLop/python/PygmentsHighlighter.pyc +/etc/QLop/python/PygmentsHighlighter.pyo +/etc/QLop/python/PythonCompleter.py +/etc/QLop/python/PythonCompleter.pyc +/etc/QLop/python/PythonCompleter.pyo +/etc/QLop/python/module_completion.py +/etc/QLop/python/module_completion.pyc +/etc/QLop/python/module_completion.pyo +/etc/QLop/python/pygments/__init__.py +/etc/QLop/python/pygments/__init__.pyc +/etc/QLop/python/pygments/__init__.pyo +/etc/QLop/python/pygments/cmdline.py +/etc/QLop/python/pygments/cmdline.pyc +/etc/QLop/python/pygments/cmdline.pyo +/etc/QLop/python/pygments/console.py +/etc/QLop/python/pygments/console.pyc +/etc/QLop/python/pygments/console.pyo +/etc/QLop/python/pygments/filter.py +/etc/QLop/python/pygments/filter.pyc +/etc/QLop/python/pygments/filter.pyo +/etc/QLop/python/pygments/filters/__init__.py +/etc/QLop/python/pygments/filters/__init__.pyc +/etc/QLop/python/pygments/filters/__init__.pyo +/etc/QLop/python/pygments/formatter.py +/etc/QLop/python/pygments/formatter.pyc +/etc/QLop/python/pygments/formatter.pyo +/etc/QLop/python/pygments/formatters/__init__.py +/etc/QLop/python/pygments/formatters/__init__.pyc +/etc/QLop/python/pygments/formatters/__init__.pyo +/etc/QLop/python/pygments/formatters/_mapping.py +/etc/QLop/python/pygments/formatters/_mapping.pyc +/etc/QLop/python/pygments/formatters/_mapping.pyo +/etc/QLop/python/pygments/formatters/bbcode.py +/etc/QLop/python/pygments/formatters/bbcode.pyc +/etc/QLop/python/pygments/formatters/bbcode.pyo +/etc/QLop/python/pygments/formatters/html.py +/etc/QLop/python/pygments/formatters/html.pyc +/etc/QLop/python/pygments/formatters/html.pyo +/etc/QLop/python/pygments/formatters/img.py +/etc/QLop/python/pygments/formatters/img.pyc +/etc/QLop/python/pygments/formatters/img.pyo +/etc/QLop/python/pygments/formatters/latex.py +/etc/QLop/python/pygments/formatters/latex.pyc +/etc/QLop/python/pygments/formatters/latex.pyo +/etc/QLop/python/pygments/formatters/other.py +/etc/QLop/python/pygments/formatters/other.pyc +/etc/QLop/python/pygments/formatters/other.pyo +/etc/QLop/python/pygments/formatters/rtf.py +/etc/QLop/python/pygments/formatters/rtf.pyc +/etc/QLop/python/pygments/formatters/rtf.pyo +/etc/QLop/python/pygments/formatters/svg.py +/etc/QLop/python/pygments/formatters/svg.pyc +/etc/QLop/python/pygments/formatters/svg.pyo +/etc/QLop/python/pygments/formatters/terminal.py +/etc/QLop/python/pygments/formatters/terminal.pyc +/etc/QLop/python/pygments/formatters/terminal.pyo +/etc/QLop/python/pygments/formatters/terminal256.py +/etc/QLop/python/pygments/formatters/terminal256.pyc +/etc/QLop/python/pygments/formatters/terminal256.pyo +/etc/QLop/python/pygments/lexer.py +/etc/QLop/python/pygments/lexer.pyc +/etc/QLop/python/pygments/lexer.pyo +/etc/QLop/python/pygments/lexers/__init__.py +/etc/QLop/python/pygments/lexers/__init__.pyc +/etc/QLop/python/pygments/lexers/__init__.pyo +/etc/QLop/python/pygments/lexers/_asybuiltins.py +/etc/QLop/python/pygments/lexers/_asybuiltins.pyc +/etc/QLop/python/pygments/lexers/_asybuiltins.pyo +/etc/QLop/python/pygments/lexers/_clbuiltins.py +/etc/QLop/python/pygments/lexers/_clbuiltins.pyc +/etc/QLop/python/pygments/lexers/_clbuiltins.pyo +/etc/QLop/python/pygments/lexers/_luabuiltins.py +/etc/QLop/python/pygments/lexers/_luabuiltins.pyc +/etc/QLop/python/pygments/lexers/_luabuiltins.pyo +/etc/QLop/python/pygments/lexers/_mapping.py +/etc/QLop/python/pygments/lexers/_mapping.pyc +/etc/QLop/python/pygments/lexers/_mapping.pyo +/etc/QLop/python/pygments/lexers/_phpbuiltins.py +/etc/QLop/python/pygments/lexers/_phpbuiltins.pyc +/etc/QLop/python/pygments/lexers/_phpbuiltins.pyo +/etc/QLop/python/pygments/lexers/_postgres_builtins.py +/etc/QLop/python/pygments/lexers/_postgres_builtins.pyc +/etc/QLop/python/pygments/lexers/_postgres_builtins.pyo +/etc/QLop/python/pygments/lexers/_scilab_builtins.py +/etc/QLop/python/pygments/lexers/_scilab_builtins.pyc +/etc/QLop/python/pygments/lexers/_scilab_builtins.pyo +/etc/QLop/python/pygments/lexers/_vimbuiltins.py +/etc/QLop/python/pygments/lexers/_vimbuiltins.pyc +/etc/QLop/python/pygments/lexers/_vimbuiltins.pyo +/etc/QLop/python/pygments/lexers/agile.py +/etc/QLop/python/pygments/lexers/agile.pyc +/etc/QLop/python/pygments/lexers/agile.pyo +/etc/QLop/python/pygments/lexers/asm.py +/etc/QLop/python/pygments/lexers/asm.pyc +/etc/QLop/python/pygments/lexers/asm.pyo +/etc/QLop/python/pygments/lexers/compiled.py +/etc/QLop/python/pygments/lexers/compiled.pyc +/etc/QLop/python/pygments/lexers/compiled.pyo +/etc/QLop/python/pygments/lexers/dotnet.py +/etc/QLop/python/pygments/lexers/dotnet.pyc +/etc/QLop/python/pygments/lexers/dotnet.pyo +/etc/QLop/python/pygments/lexers/functional.py +/etc/QLop/python/pygments/lexers/functional.pyc +/etc/QLop/python/pygments/lexers/functional.pyo +/etc/QLop/python/pygments/lexers/hdl.py +/etc/QLop/python/pygments/lexers/hdl.pyc +/etc/QLop/python/pygments/lexers/hdl.pyo +/etc/QLop/python/pygments/lexers/jvm.py +/etc/QLop/python/pygments/lexers/jvm.pyc +/etc/QLop/python/pygments/lexers/jvm.pyo +/etc/QLop/python/pygments/lexers/math.py +/etc/QLop/python/pygments/lexers/math.pyc +/etc/QLop/python/pygments/lexers/math.pyo +/etc/QLop/python/pygments/lexers/other.py +/etc/QLop/python/pygments/lexers/other.pyc +/etc/QLop/python/pygments/lexers/other.pyo +/etc/QLop/python/pygments/lexers/parsers.py +/etc/QLop/python/pygments/lexers/parsers.pyc +/etc/QLop/python/pygments/lexers/parsers.pyo +/etc/QLop/python/pygments/lexers/shell.py +/etc/QLop/python/pygments/lexers/shell.pyc +/etc/QLop/python/pygments/lexers/shell.pyo +/etc/QLop/python/pygments/lexers/special.py +/etc/QLop/python/pygments/lexers/special.pyc +/etc/QLop/python/pygments/lexers/special.pyo +/etc/QLop/python/pygments/lexers/sql.py +/etc/QLop/python/pygments/lexers/sql.pyc +/etc/QLop/python/pygments/lexers/sql.pyo +/etc/QLop/python/pygments/lexers/templates.py +/etc/QLop/python/pygments/lexers/templates.pyc +/etc/QLop/python/pygments/lexers/templates.pyo +/etc/QLop/python/pygments/lexers/text.py +/etc/QLop/python/pygments/lexers/text.pyc +/etc/QLop/python/pygments/lexers/text.pyo +/etc/QLop/python/pygments/lexers/web.py +/etc/QLop/python/pygments/lexers/web.pyc +/etc/QLop/python/pygments/lexers/web.pyo +/etc/QLop/python/pygments/plugin.py +/etc/QLop/python/pygments/plugin.pyc +/etc/QLop/python/pygments/plugin.pyo +/etc/QLop/python/pygments/scanner.py +/etc/QLop/python/pygments/scanner.pyc +/etc/QLop/python/pygments/scanner.pyo +/etc/QLop/python/pygments/style.py +/etc/QLop/python/pygments/style.pyc +/etc/QLop/python/pygments/style.pyo +/etc/QLop/python/pygments/styles/__init__.py +/etc/QLop/python/pygments/styles/__init__.pyc +/etc/QLop/python/pygments/styles/__init__.pyo +/etc/QLop/python/pygments/styles/autumn.py +/etc/QLop/python/pygments/styles/autumn.pyc +/etc/QLop/python/pygments/styles/autumn.pyo +/etc/QLop/python/pygments/styles/borland.py +/etc/QLop/python/pygments/styles/borland.pyc +/etc/QLop/python/pygments/styles/borland.pyo +/etc/QLop/python/pygments/styles/bw.py +/etc/QLop/python/pygments/styles/bw.pyc +/etc/QLop/python/pygments/styles/bw.pyo +/etc/QLop/python/pygments/styles/colorful.py +/etc/QLop/python/pygments/styles/colorful.pyc +/etc/QLop/python/pygments/styles/colorful.pyo +/etc/QLop/python/pygments/styles/default.py +/etc/QLop/python/pygments/styles/default.pyc +/etc/QLop/python/pygments/styles/default.pyo +/etc/QLop/python/pygments/styles/emacs.py +/etc/QLop/python/pygments/styles/emacs.pyc +/etc/QLop/python/pygments/styles/emacs.pyo +/etc/QLop/python/pygments/styles/friendly.py +/etc/QLop/python/pygments/styles/friendly.pyc +/etc/QLop/python/pygments/styles/friendly.pyo +/etc/QLop/python/pygments/styles/fruity.py +/etc/QLop/python/pygments/styles/fruity.pyc +/etc/QLop/python/pygments/styles/fruity.pyo +/etc/QLop/python/pygments/styles/manni.py +/etc/QLop/python/pygments/styles/manni.pyc +/etc/QLop/python/pygments/styles/manni.pyo +/etc/QLop/python/pygments/styles/monokai.py +/etc/QLop/python/pygments/styles/monokai.pyc +/etc/QLop/python/pygments/styles/monokai.pyo +/etc/QLop/python/pygments/styles/murphy.py +/etc/QLop/python/pygments/styles/murphy.pyc +/etc/QLop/python/pygments/styles/murphy.pyo +/etc/QLop/python/pygments/styles/native.py +/etc/QLop/python/pygments/styles/native.pyc +/etc/QLop/python/pygments/styles/native.pyo +/etc/QLop/python/pygments/styles/pastie.py +/etc/QLop/python/pygments/styles/pastie.pyc +/etc/QLop/python/pygments/styles/pastie.pyo +/etc/QLop/python/pygments/styles/perldoc.py +/etc/QLop/python/pygments/styles/perldoc.pyc +/etc/QLop/python/pygments/styles/perldoc.pyo +/etc/QLop/python/pygments/styles/rrt.py +/etc/QLop/python/pygments/styles/rrt.pyc +/etc/QLop/python/pygments/styles/rrt.pyo +/etc/QLop/python/pygments/styles/tango.py +/etc/QLop/python/pygments/styles/tango.pyc +/etc/QLop/python/pygments/styles/tango.pyo +/etc/QLop/python/pygments/styles/trac.py +/etc/QLop/python/pygments/styles/trac.pyc +/etc/QLop/python/pygments/styles/trac.pyo +/etc/QLop/python/pygments/styles/vim.py +/etc/QLop/python/pygments/styles/vim.pyc +/etc/QLop/python/pygments/styles/vim.pyo +/etc/QLop/python/pygments/styles/vs.py +/etc/QLop/python/pygments/styles/vs.pyc +/etc/QLop/python/pygments/styles/vs.pyo +/etc/QLop/python/pygments/token.py +/etc/QLop/python/pygments/token.pyc +/etc/QLop/python/pygments/token.pyo +/etc/QLop/python/pygments/unistring.py +/etc/QLop/python/pygments/unistring.pyc +/etc/QLop/python/pygments/unistring.pyo +/etc/QLop/python/pygments/util.py +/etc/QLop/python/pygments/util.pyc +/etc/QLop/python/pygments/util.pyo +/usr/bin/QLop +/usr/share/QLop/QLop.png +/usr/share/QLop/QLop.svg +/usr/share/appdata/QLop.appdata.xml +/usr/share/applications/QLop.desktop + + +%changelog +* Wed Apr 8 2015 Alexis Jeandet - 0.1 +- Initial Fedora packaging + +* Fri Apr 3 2015 Alexis Jeandet - 0.1 +- Initial Fedora packaging diff --git a/resources/QLop.png b/resources/QLop.png new file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..5810528034b4d1067d09eec93d018f6227f8a628 GIT binary patch literal 65772 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + QLop + + + + + + + QLop + + diff --git a/resources/qlop.qrc b/resources/qlop.qrc --- a/resources/qlop.qrc +++ b/resources/qlop.qrc @@ -5,5 +5,9 @@ ListView.svg TreeView.svg Gnome-go-up.svg + QLop.svg + + + QLop.png 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; - QLopDataVector* ch1V=new QLopDataVector(); - QLopDataVector* ch2V=new QLopDataVector(); - QLopDataVector* ch3V=new QLopDataVector(); + QLopQCPDataVector* ch1V=new QLopQCPDataVector(); + QLopQCPDataVector* ch2V=new QLopQCPDataVector(); + QLopQCPDataVector* ch3V=new QLopQCPDataVector(); ch1V->data=ch1; ch2V->data=ch2; ch3V->data=ch3; @@ -281,9 +281,9 @@ void CassiniDataFile::writeFile() { if(m_data.count()==3) { - QLopDataVector* ch1V=(QLopDataVector*)m_data.at(0); - QLopDataVector* ch2V=(QLopDataVector*)m_data.at(1); - QLopDataVector* ch3V=(QLopDataVector*)m_data.at(2); + QLopQCPDataVector* ch1V=(QLopQCPDataVector*)m_data.at(0); + QLopQCPDataVector* ch2V=(QLopQCPDataVector*)m_data.at(1); + QLopQCPDataVector* ch3V=(QLopQCPDataVector*)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 @@ -86,7 +86,9 @@ void CassiniTools::makePlot() SocExplorerPlotActions* action=new SocExplorerPlotActions("export view",plot->PID(),_self); plot->addAction(action); QObject::connect(action,SIGNAL(triggered(int)),_self,SLOT(export_view(int))); - ExportAction=new SocExplorerPlotActions("export view to "+QString(plot->title()).replace(".TAB","-part.TAB"),plot->PID(),_self); + QString fileName = QString(plot->title()).replace(".TAB",""); + fileName = generateFileName(fileName,".TAB"); + ExportAction=new SocExplorerPlotActions("export view to "+fileName,plot->PID(),_self); plot->addAction(ExportAction); QObject::connect(ExportAction,SIGNAL(triggered(int)),_self,SLOT(export_view_Predefined_FileName(int))); action=new SocExplorerPlotActions("FFT of the current view",plot->PID(),_self); @@ -130,7 +132,9 @@ void CassiniTools::plotFile(const QStrin if(plot) { plot->setTitle(File); - ExportAction->setText("export view to "+QString(File).replace(".TAB","-part.TAB")); + QString fileName = QString(File).replace(".TAB","-part"); + fileName = generateFileName(fileName,".TAB"); + ExportAction->setText("export view to "+fileName); } } } @@ -154,7 +158,7 @@ void CassiniTools::export_view(int PID) QLopDataList vectors; for(int i=0;igraphCount();i++) { - QLopDataVector* vect = new QLopDataVector(); + QLopQCPDataVector* vect = new QLopQCPDataVector(); vect->data = plot->getVisibleData(i); vectors.append(vect); } @@ -169,13 +173,14 @@ void CassiniTools::export_view_Predefine if(plot==NULL) return; { - QString fileName = QString(plot->title()).replace(".TAB","-part.TAB"); + QString fileName = QString(plot->title()).replace(".TAB","-part"); + fileName = generateFileName(fileName,".TAB"); if(fileName!="") { QLopDataList vectors; for(int i=0;igraphCount();i++) { - QLopDataVector* vect = new QLopDataVector(); + QLopQCPDataVector* vect = new QLopQCPDataVector(); vect->data = plot->getVisibleData(i); vectors.append(vect); } @@ -196,16 +201,16 @@ void CassiniTools::compute_fft_on_view(i QLopDataList vectors; for(int i=0;igraphCount();i++) { - QLopDataVector* vect = new QLopDataVector(); + QLopQCPDataVector* vect = new QLopQCPDataVector(); vect->data = plot->getVisibleData(i); vectors.append(vect); } if(vectors.count()==3) { - QLopDataVector* ch1V=(QLopDataVector*)vectors.at(0); - QLopDataVector* ch2V=(QLopDataVector*)vectors.at(1); - QLopDataVector* ch3V=(QLopDataVector*)vectors.at(2); - QLopDataVector* FFTout=new QLopDataVector(); + QLopQCPDataVector* ch1V=(QLopQCPDataVector*)vectors.at(0); + QLopQCPDataVector* ch2V=(QLopQCPDataVector*)vectors.at(1); + QLopQCPDataVector* ch3V=(QLopQCPDataVector*)vectors.at(2); + QLopQCPDataVector* FFTout=new QLopQCPDataVector(); if(ch1V->data->count()==ch2V->data->count() && ch1V->data->count()==ch3V->data->count()) { @@ -259,6 +264,17 @@ void CassiniTools::compute_fft_on_view(i } } +QString CassiniTools::generateFileName(const QString &baseName, const QString &extension) +{ + QString fileName = baseName+extension; + int i=0; + while(QFile::exists(fileName)) + { + fileName = baseName+QString::number(i++)+extension; + } + return fileName; +} + QDockWidget *CassiniTools::getGUI() { if(!m_noGui && (m_gui==NULL)) @@ -297,7 +313,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,((QLopDataVector*)data.at(i))->data,false); + plot->setGraphData(i,((QLopQCPDataVector*)data.at(i))->data,false); } plot->rescaleAxis(); plot->replot(); diff --git a/src/Cassini/cassinitools.h b/src/Cassini/cassinitools.h --- a/src/Cassini/cassinitools.h +++ b/src/Cassini/cassinitools.h @@ -57,6 +57,7 @@ public slots: void export_view_Predefined_FileName(int PID); void compute_fft_on_view(int PID); private slots: + static QString generateFileName(const QString& baseName,const QString& extension); void dataReady(QLopDataList data); }; diff --git a/src/Core/Widgets/NicePyConsole/NicePyConsole.pri b/src/Core/Widgets/NicePyConsole/NicePyConsole.pri --- a/src/Core/Widgets/NicePyConsole/NicePyConsole.pri +++ b/src/Core/Widgets/NicePyConsole/NicePyConsole.pri @@ -99,8 +99,8 @@ NicePyConsolePygmentsFiles.files = $${PW unix{ - NicePyConsoleFiles.path = /etc/SocExplorer/python - NicePyConsolePygmentsFiles.path = /etc/SocExplorer/python + NicePyConsoleFiles.path = /etc/QLop/python + NicePyConsolePygmentsFiles.path = /etc/QLop/python INSTALLS += NicePyConsoleFiles NicePyConsolePygmentsFiles QMAKE_POST_LINK = $${QMAKE_MKDIR} $${DESTDIR}/python && $${QMAKE_COPY} $${NicePyConsoleFiles.files} $${DESTDIR}/python && $${QMAKE_COPY} -R $${NicePyConsolePygmentsFiles.files} $${DESTDIR}/python } diff --git a/src/Core/Widgets/qlopdatabaseviewer.cpp b/src/Core/Widgets/qlopdatabaseviewer.cpp new file mode 100644 --- /dev/null +++ b/src/Core/Widgets/qlopdatabaseviewer.cpp @@ -0,0 +1,29 @@ +#include "qlopdatabaseviewer.h" +#include "ui_qlopdatabaseviewer.h" + +QLopDataBaseViewer::QLopDataBaseViewer(QWidget *parent) : + QDockWidget(parent), + ui(new Ui::QLopDataBaseViewer) +{ + ui->setupUi(this); + this->model = new QLopDataBaseViewerModel(); + this->ui->dataBaseTbleView->setModel(model); +} + +QLopDataBaseViewer::~QLopDataBaseViewer() +{ + delete ui; + delete model; +} + +void QLopDataBaseViewer::changeEvent(QEvent *e) +{ + QDockWidget::changeEvent(e); + switch (e->type()) { + case QEvent::LanguageChange: + ui->retranslateUi(this); + break; + default: + break; + } +} diff --git a/src/Core/Widgets/qlopdatabaseviewer.h b/src/Core/Widgets/qlopdatabaseviewer.h new file mode 100644 --- /dev/null +++ b/src/Core/Widgets/qlopdatabaseviewer.h @@ -0,0 +1,27 @@ +#ifndef QLOPDATABASEVIEWER_H +#define QLOPDATABASEVIEWER_H + +#include +#include + +namespace Ui { +class QLopDataBaseViewer; +} + +class QLopDataBaseViewer : public QDockWidget +{ + Q_OBJECT + +public: + explicit QLopDataBaseViewer(QWidget *parent = 0); + ~QLopDataBaseViewer(); + +protected: + void changeEvent(QEvent *e); + +private: + Ui::QLopDataBaseViewer *ui; + QLopDataBaseViewerModel* model; +}; + +#endif // QLOPDATABASEVIEWER_H diff --git a/src/Core/Widgets/qlopdatabaseviewer.ui b/src/Core/Widgets/qlopdatabaseviewer.ui new file mode 100644 --- /dev/null +++ b/src/Core/Widgets/qlopdatabaseviewer.ui @@ -0,0 +1,26 @@ + + + QLopDataBaseViewer + + + + 0 + 0 + 825 + 427 + + + + DockWidget + + + + + + + + + + + + diff --git a/src/Core/Widgets/qlopdatabaseviewermodel.cpp b/src/Core/Widgets/qlopdatabaseviewermodel.cpp new file mode 100644 --- /dev/null +++ b/src/Core/Widgets/qlopdatabaseviewermodel.cpp @@ -0,0 +1,41 @@ +#include "qlopdatabaseviewermodel.h" + +QLopDataBaseViewerModel::QLopDataBaseViewerModel(QObject *parent) + : QAbstractTableModel(parent) +{ + beginResetModel(); + endResetModel(); +} + +QLopDataBaseViewerModel::~QLopDataBaseViewerModel() +{ + +} + +int QLopDataBaseViewerModel::rowCount(const QModelIndex &parent) const +{ + return QLopDataBase::count(); +} + +int QLopDataBaseViewerModel::columnCount(const QModelIndex &parent) const +{ + return 3; +} + +QVariant QLopDataBaseViewerModel::data(const QModelIndex &index, int role) const +{ + if (!index.isValid() || role != Qt::DisplayRole) + return QVariant(); + QLopData* data=QLopDataBase::self()->getDataFromIdex(index.row()); + if(data) + return data->name; + else QVariant(); +} + +QVariant QLopDataBaseViewerModel::headerData(int section, Qt::Orientation orientation, int role) const +{ + if (role == Qt::SizeHintRole) + return QSize(1, 1); + return QVariant(); +} + diff --git a/src/Core/Widgets/qlopdatabaseviewermodel.h b/src/Core/Widgets/qlopdatabaseviewermodel.h new file mode 100644 --- /dev/null +++ b/src/Core/Widgets/qlopdatabaseviewermodel.h @@ -0,0 +1,24 @@ +#ifndef QLOPDATABASEVIEWERMODEL_H +#define QLOPDATABASEVIEWERMODEL_H + +#include +#include +#include + +class QLopDataBaseViewerModel : public QAbstractTableModel +{ +public: + QLopDataBaseViewerModel(QObject *parent=0); + ~QLopDataBaseViewerModel(); + + int rowCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE; + int columnCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE; + + QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE; + QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE; + +private: + +}; + +#endif // QLOPDATABASEVIEWERMODEL_H diff --git a/src/Core/qlopdata.cpp b/src/Core/qlopdata.cpp --- a/src/Core/qlopdata.cpp +++ b/src/Core/qlopdata.cpp @@ -36,12 +36,23 @@ QLopData::~QLopData() -QLopDataVector::QLopDataVector(QObject *parent) +QLopQCPDataVector::QLopQCPDataVector(QObject *parent) +{ + this->type = QLopData::QCPDataVector; +} + +QLopQCPDataVector::~QLopQCPDataVector() +{ + delete data; +} + + +QLopQVector::QLopQVector(QObject *parent) { this->type = QLopData::Vector; } -QLopDataVector::~QLopDataVector() +QLopQVector::~QLopQVector() { delete data; } diff --git a/src/Core/qlopdata.h b/src/Core/qlopdata.h --- a/src/Core/qlopdata.h +++ b/src/Core/qlopdata.h @@ -46,6 +46,7 @@ public: Scalar=0, Vector=1, Matrix=2, + QCPDataVector=3, None=-1, } QLopDataType; @@ -62,17 +63,29 @@ public slots: private: }; -class QLopDataVector : public QLopData +class QLopQCPDataVector : public QLopData { Q_OBJECT public: - explicit QLopDataVector(QObject *parent = 0); - ~QLopDataVector(); + explicit QLopQCPDataVector(QObject *parent = 0); + ~QLopQCPDataVector(); QVector* data; signals: public slots: private: }; + +class QLopQVector : public QLopData +{ + Q_OBJECT +public: + explicit QLopQVector(QObject *parent = 0); + ~QLopQVector(); + QVector* data; +signals: +public slots: +private: +}; typedef QList QLopDataList; #endif // QLOPDATA_H diff --git a/src/Core/qlopdatabase.cpp b/src/Core/qlopdatabase.cpp --- a/src/Core/qlopdatabase.cpp +++ b/src/Core/qlopdatabase.cpp @@ -81,3 +81,11 @@ QLopData *QLopDataBase::getData(int ID) return NULL; } +QLopData *QLopDataBase::getDataFromIdex(int index) +{ + if((index>=0)&&(indexcount())) + return m_dataBase->at(index); + else + return NULL; +} + diff --git a/src/Core/qlopdatabase.h b/src/Core/qlopdatabase.h --- a/src/Core/qlopdatabase.h +++ b/src/Core/qlopdatabase.h @@ -19,6 +19,7 @@ public: static int count(); static QLopData* getData(const QString& name); static QLopData* getData(int ID); + QLopData* getDataFromIdex(int index); signals: public slots: diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -44,6 +44,7 @@ MainWindow::MainWindow(int OMP_THREADS, { this->OMP_THREADS = OMP_THREADS; ui->setupUi(this); + this->setWindowIcon(QIcon(":img/QLop.svg")); // QLopPlots::getPlot()->setXaxisTickLabelType(QCPAxis::ltDateTime); // QLopPlots::getPlot()->setXaxisDateTimeFormat("hh:mm:ss.zzz"); @@ -57,7 +58,6 @@ MainWindow::MainWindow(int OMP_THREADS, this->progress.append(new QProgressBar(this->progressWidget)); this->progress.last()->setMinimum(0); this->progress.last()->setMaximum(100); -// connect(&this->fileReader,SIGNAL(updateProgress(int,int)),this,SLOT(updateProgress(int,int))); this->progressLayout->addWidget(this->progress.last()); this->progressWidget->hide(); this->progressThreadIds[i] = -1;