From d65e500c483d6277ec560cf5ec053a4f2511df7d 2017-12-13 13:31:55 From: Thibaud Rabillard Date: 2017-12-13 13:31:55 Subject: [PATCH] Merge branch 'feature/CatalogueGui' into develop --- diff --git a/app/src/MainWindow.cpp b/app/src/MainWindow.cpp index c96666f..eda17cd 100644 --- a/app/src/MainWindow.cpp +++ b/app/src/MainWindow.cpp @@ -86,6 +86,8 @@ MainWindow::MainWindow(QWidget *parent) m_Ui->splitter->setCollapsible(LEFTINSPECTORSIDEPANESPLITTERINDEX, false); m_Ui->splitter->setCollapsible(RIGHTINSPECTORSIDEPANESPLITTERINDEX, false); + impl->m_CatalogExplorer->setVisualizationWidget(m_Ui->view); + auto leftSidePane = m_Ui->leftInspectorSidePane->sidePane(); auto openLeftInspectorAction = new QAction{QIcon{ diff --git a/core/include/Catalogue/CatalogueController.h b/core/include/Catalogue/CatalogueController.h index b503555..9d839af 100644 --- a/core/include/Catalogue/CatalogueController.h +++ b/core/include/Catalogue/CatalogueController.h @@ -41,8 +41,7 @@ public: std::list > retrieveEvents(const QString &repository) const; std::list > retrieveAllEvents() const; std::list > - retrieveEventsFromCatalogue(const QString &repository, - std::shared_ptr catalogue) const; + retrieveEventsFromCatalogue(std::shared_ptr catalogue) const; // void updateEvent(std::shared_ptr event); // void trashEvent(std::shared_ptr event); // void removeEvent(std::shared_ptr event); diff --git a/core/include/Common/MimeTypesDef.h b/core/include/Common/MimeTypesDef.h index 27535fa..cb8113a 100644 --- a/core/include/Common/MimeTypesDef.h +++ b/core/include/Common/MimeTypesDef.h @@ -15,6 +15,7 @@ extern SCIQLOP_CORE_EXPORT const QString MIME_TYPE_VARIABLE_LIST; extern SCIQLOP_CORE_EXPORT const QString MIME_TYPE_PRODUCT_LIST; extern SCIQLOP_CORE_EXPORT const QString MIME_TYPE_TIME_RANGE; extern SCIQLOP_CORE_EXPORT const QString MIME_TYPE_SELECTION_ZONE; +extern SCIQLOP_CORE_EXPORT const QString MIME_TYPE_EVENT_LIST; #endif // SCIQLOP_MIMETYPESDEF_H diff --git a/core/src/Catalogue/CatalogueController.cpp b/core/src/Catalogue/CatalogueController.cpp index 3c995db..9e2ad7c 100644 --- a/core/src/Catalogue/CatalogueController.cpp +++ b/core/src/Catalogue/CatalogueController.cpp @@ -103,8 +103,7 @@ std::list > CatalogueController::retrieveAllEvents() co } std::list > -CatalogueController::retrieveEventsFromCatalogue(const QString &repository, - std::shared_ptr catalogue) const +CatalogueController::retrieveEventsFromCatalogue(std::shared_ptr catalogue) const { auto eventsShared = std::list >{}; auto events = impl->m_CatalogueDao.getCatalogueEvents(*catalogue); diff --git a/core/src/Common/MimeTypesDef.cpp b/core/src/Common/MimeTypesDef.cpp index c057895..85a5347 100644 --- a/core/src/Common/MimeTypesDef.cpp +++ b/core/src/Common/MimeTypesDef.cpp @@ -6,3 +6,4 @@ const QString MIME_TYPE_VARIABLE_LIST = QStringLiteral("sciqlop/var-list"); const QString MIME_TYPE_PRODUCT_LIST = QStringLiteral("sciqlop/product-list"); const QString MIME_TYPE_TIME_RANGE = QStringLiteral("sciqlop/time-range"); const QString MIME_TYPE_SELECTION_ZONE = QStringLiteral("sciqlop/selection-zone"); +const QString MIME_TYPE_EVENT_LIST = QStringLiteral("sciqlop/event-list"); diff --git a/core/src/Variable/VariableController.cpp b/core/src/Variable/VariableController.cpp index b5a2eef..e76989b 100644 --- a/core/src/Variable/VariableController.cpp +++ b/core/src/Variable/VariableController.cpp @@ -669,7 +669,7 @@ AcquisitionZoomType VariableController::getZoomType(const SqpRange &range, const qCDebug(LOG_VariableController()) << "zoomtype: PanLeft"; zoomType = AcquisitionZoomType::PanLeft; } - else if (range.m_TStart > oldRange.m_TStart && oldRange.m_TEnd > range.m_TEnd) { + else if (range.m_TStart >= oldRange.m_TStart && oldRange.m_TEnd >= range.m_TEnd) { qCDebug(LOG_VariableController()) << "zoomtype: ZoomIn"; zoomType = AcquisitionZoomType::ZoomIn; } diff --git a/extern/CatalogueAPI.cmake b/extern/CatalogueAPI.cmake index 7bacfa1..c18078c 100644 --- a/extern/CatalogueAPI.cmake +++ b/extern/CatalogueAPI.cmake @@ -40,7 +40,7 @@ ExternalProject_Add( GIT_REPOSITORY https://perrinel@hephaistos.lpp.polytechnique.fr/rhodecode/GIT_REPOSITORIES/LPP/Users/mperrinel/CatalogueAPI GIT_TAG develop - UPDATE_COMMAND ${GIT_EXECUTABLE} pull + UPDATE_COMMAND ${GIT_EXECUTABLE} pull origin develop PATCH_COMMAND "" SOURCE_DIR "${CATALOGUEAPI_SOURCES_PATH}" diff --git a/gui/CMakeLists.txt b/gui/CMakeLists.txt index dab081d..119546f 100644 --- a/gui/CMakeLists.txt +++ b/gui/CMakeLists.txt @@ -75,6 +75,16 @@ INSTALL(TARGETS ${SQPGUI_LIBRARY_NAME} ) add_dependencies(${SQPGUI_LIBRARY_NAME} ${SQPCORE_LIBRARY_NAME}) +# Find CATALOGUE_API +include_directories("${CATALOGUEAPI_INCLUDE}") +TARGET_LINK_LIBRARIES(${SQPGUI_LIBRARY_NAME} ${CATALOGUEAPI_LIBRARIES}) +INSTALL(TARGETS ${SQPGUI_LIBRARY_NAME} + RUNTIME DESTINATION ${INSTALL_BINARY_DIR} + LIBRARY DESTINATION ${INSTALL_LIBRARY_DIR} + ARCHIVE DESTINATION ${INSTALL_LIBRARY_DIR} +) + +add_dependencies(${SQPGUI_LIBRARY_NAME} CatalogueAPI) # From cmake documentation: http://www.cmake.org/cmake/help/v3.0/manual/cmake-buildsystem.7.html # Entries in the COMPILE_DEFINITIONS are prefixed with -D or /D and added to the compile line in an unspecified order. diff --git a/gui/include/Catalogue/CatalogueEventsTableModel.h b/gui/include/Catalogue/CatalogueEventsTableModel.h new file mode 100644 index 0000000..9bab0a7 --- /dev/null +++ b/gui/include/Catalogue/CatalogueEventsTableModel.h @@ -0,0 +1,38 @@ +#ifndef SCIQLOP_CATALOGUEEVENTSTABLEMODEL_H +#define SCIQLOP_CATALOGUEEVENTSTABLEMODEL_H + +#include +#include + +class DBEvent; + +class CatalogueEventsTableModel : public QAbstractTableModel { +public: + CatalogueEventsTableModel(QObject *parent = nullptr); + + void setEvents(const QVector > &events); + std::shared_ptr getEvent(int row) const; + + void addEvent(const std::shared_ptr &events); + void removeEvent(const std::shared_ptr &events); + + // Model + int rowCount(const QModelIndex &parent = QModelIndex()) const override; + int columnCount(const QModelIndex &parent = QModelIndex()) const override; + Qt::ItemFlags flags(const QModelIndex &index) const override; + QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; + QVariant headerData(int section, Qt::Orientation orientation, + int role = Qt::DisplayRole) const override; + void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) override; + + Qt::DropActions supportedDragActions() const override; + QStringList mimeTypes() const override; + QMimeData *mimeData(const QModelIndexList &indexes) const override; + + +private: + class CatalogueEventsTableModelPrivate; + spimpl::unique_impl_ptr impl; +}; + +#endif // SCIQLOP_CATALOGUEEVENTSTABLEMODEL_H diff --git a/gui/include/Catalogue/CatalogueEventsWidget.h b/gui/include/Catalogue/CatalogueEventsWidget.h index deae927..04fa2af 100644 --- a/gui/include/Catalogue/CatalogueEventsWidget.h +++ b/gui/include/Catalogue/CatalogueEventsWidget.h @@ -2,24 +2,33 @@ #define SCIQLOP_CATALOGUEEVENTSWIDGET_H #include +#include #include +class DBCatalogue; +class DBEvent; +class VisualizationWidget; + namespace Ui { class CatalogueEventsWidget; } +Q_DECLARE_LOGGING_CATEGORY(LOG_CatalogueEventsWidget) + class CatalogueEventsWidget : public QWidget { Q_OBJECT signals: - void eventSelected(const QString &event); + void eventsSelected(const QVector > &event); public: explicit CatalogueEventsWidget(QWidget *parent = 0); virtual ~CatalogueEventsWidget(); + void setVisualizationWidget(VisualizationWidget *visualization); + public slots: - void populateWithCatalogue(const QString &catalogue); + void populateWithCatalogues(const QVector > &catalogues); private: Ui::CatalogueEventsWidget *ui; diff --git a/gui/include/Catalogue/CatalogueExplorer.h b/gui/include/Catalogue/CatalogueExplorer.h index 0e433f2..9baa58f 100644 --- a/gui/include/Catalogue/CatalogueExplorer.h +++ b/gui/include/Catalogue/CatalogueExplorer.h @@ -1,12 +1,15 @@ #ifndef SCIQLOP_CATALOGUEEXPLORER_H #define SCIQLOP_CATALOGUEEXPLORER_H +#include #include namespace Ui { class CatalogueExplorer; } +class VisualizationWidget; + class CatalogueExplorer : public QDialog { Q_OBJECT @@ -14,8 +17,13 @@ public: explicit CatalogueExplorer(QWidget *parent = 0); virtual ~CatalogueExplorer(); + void setVisualizationWidget(VisualizationWidget *visualization); + private: Ui::CatalogueExplorer *ui; + + class CatalogueExplorerPrivate; + spimpl::unique_impl_ptr impl; }; #endif // SCIQLOP_CATALOGUEEXPLORER_H diff --git a/gui/include/Catalogue/CatalogueInspectorWidget.h b/gui/include/Catalogue/CatalogueInspectorWidget.h index b78fd55..c049a81 100644 --- a/gui/include/Catalogue/CatalogueInspectorWidget.h +++ b/gui/include/Catalogue/CatalogueInspectorWidget.h @@ -2,11 +2,15 @@ #define SCIQLOP_CATALOGUEINSPECTORWIDGET_H #include +#include namespace Ui { class CatalogueInspectorWidget; } +class DBCatalogue; +class DBEvent; + class CatalogueInspectorWidget : public QWidget { Q_OBJECT @@ -19,8 +23,8 @@ public: Page currentPage() const; - void setEvent(const QString &event); - void setCatalogue(const QString &catalogue); + void setEvent(const std::shared_ptr &event); + void setCatalogue(const std::shared_ptr &catalogue); public slots: void showPage(Page page); diff --git a/gui/include/Catalogue/CatalogueSideBarWidget.h b/gui/include/Catalogue/CatalogueSideBarWidget.h index b9855dd..f762c3b 100644 --- a/gui/include/Catalogue/CatalogueSideBarWidget.h +++ b/gui/include/Catalogue/CatalogueSideBarWidget.h @@ -5,6 +5,8 @@ #include #include +class DBCatalogue; + namespace Ui { class CatalogueSideBarWidget; } @@ -13,9 +15,11 @@ class CatalogueSideBarWidget : public QWidget { Q_OBJECT signals: - void catalogueSelected(const QString &catalogue); + void catalogueSelected(const QVector > &catalogues); + void databaseSelected(const QStringList &databases); void allEventsSelected(); void trashSelected(); + void selectionCleared(); public: explicit CatalogueSideBarWidget(QWidget *parent = 0); @@ -26,6 +30,9 @@ private: class CatalogueSideBarWidgetPrivate; spimpl::unique_impl_ptr impl; + +private slots: + void onContextMenuRequested(const QPoint &pos); }; #endif // SCIQLOP_CATALOGUESIDEBARWIDGET_H diff --git a/gui/include/Catalogue/CatalogueTreeWidgetItem.h b/gui/include/Catalogue/CatalogueTreeWidgetItem.h new file mode 100644 index 0000000..60ea055 --- /dev/null +++ b/gui/include/Catalogue/CatalogueTreeWidgetItem.h @@ -0,0 +1,28 @@ +#ifndef SCIQLOP_CATALOGUETREEWIDGETITEM_H +#define SCIQLOP_CATALOGUETREEWIDGETITEM_H + +#include +#include + +class DBCatalogue; + + +class CatalogueTreeWidgetItem : public QTreeWidgetItem { +public: + CatalogueTreeWidgetItem(std::shared_ptr catalogue, + int type = QTreeWidgetItem::Type); + + QVariant data(int column, int role) const override; + void setData(int column, int role, const QVariant &value) override; + + /// Returns the catalogue represented by the item + std::shared_ptr catalogue() const; + + void setHasChanges(bool value); + +private: + class CatalogueTreeWidgetItemPrivate; + spimpl::unique_impl_ptr impl; +}; + +#endif // SCIQLOP_CATALOGUETREEWIDGETITEM_H diff --git a/gui/include/SqpApplication.h b/gui/include/SqpApplication.h index 91f5f13..fad8eb6 100644 --- a/gui/include/SqpApplication.h +++ b/gui/include/SqpApplication.h @@ -22,6 +22,7 @@ class VariableController; class VisualizationController; class DragDropGuiController; class ActionsGuiController; +class CatalogueController; /** * @brief The SqpApplication class aims to make the link between SciQlop @@ -45,6 +46,7 @@ public: TimeController &timeController() noexcept; VariableController &variableController() noexcept; VisualizationController &visualizationController() noexcept; + CatalogueController &catalogueController() noexcept; /// Accessors for the differents sciqlop helpers, these helpers classes are like controllers but /// doesn't live in a thread and access gui diff --git a/gui/include/Visualization/VisualizationTabWidget.h b/gui/include/Visualization/VisualizationTabWidget.h index 4df7113..5299e6e 100644 --- a/gui/include/Visualization/VisualizationTabWidget.h +++ b/gui/include/Visualization/VisualizationTabWidget.h @@ -25,11 +25,19 @@ public: explicit VisualizationTabWidget(const QString &name = {}, QWidget *parent = 0); virtual ~VisualizationTabWidget(); - /// Add a zone widget + /// Adds a zone widget void addZone(VisualizationZoneWidget *zoneWidget); + /// Inserts a zone widget at the specified position void insertZone(int index, VisualizationZoneWidget *zoneWidget); + /// Returns the list of zone widget names in the order they are displayed + QStringList availableZoneWidgets() const; + + /// Returns the zone with the specified name. + /// If multiple zone with the same name exist, the first one is returned. + VisualizationZoneWidget *getZoneWithName(const QString &zoneName); + /** * Creates a zone using a variable. The variable will be displayed in a new graph of the new * zone. The zone is added at the end. diff --git a/gui/include/Visualization/VisualizationWidget.h b/gui/include/Visualization/VisualizationWidget.h index fedb137..adcfe8a 100644 --- a/gui/include/Visualization/VisualizationWidget.h +++ b/gui/include/Visualization/VisualizationWidget.h @@ -30,6 +30,8 @@ public: /// Returns the class which manage the selection of selection zone across the visualization VisualizationSelectionZoneManager &selectionZoneManager() const; + VisualizationTabWidget *currentTabWidget() const; + // IVisualizationWidget interface void accept(IVisualizationWidgetVisitor *visitor) override; bool canDrop(const Variable &variable) const override; diff --git a/gui/include/Visualization/VisualizationZoneWidget.h b/gui/include/Visualization/VisualizationZoneWidget.h index c13f26f..daa2525 100644 --- a/gui/include/Visualization/VisualizationZoneWidget.h +++ b/gui/include/Visualization/VisualizationZoneWidget.h @@ -1,6 +1,7 @@ #ifndef SCIQLOP_VISUALIZATIONZONEWIDGET_H #define SCIQLOP_VISUALIZATIONZONEWIDGET_H +#include "Data/SqpRange.h" #include "Visualization/IVisualizationWidget.h" #include "Visualization/VisualizationDragWidget.h" @@ -27,6 +28,10 @@ public: explicit VisualizationZoneWidget(const QString &name = {}, QWidget *parent = 0); virtual ~VisualizationZoneWidget(); + /// Sets the range of the zone, only works if there is at least one graph in the zone + /// Note: calibrations between graphs are lost. + void setZoneRange(const SqpRange &range); + /// Adds a graph widget void addGraph(VisualizationGraphWidget *graphWidget); diff --git a/gui/meson.build b/gui/meson.build index 55e755d..f7bf8af 100644 --- a/gui/meson.build +++ b/gui/meson.build @@ -1,4 +1,7 @@ +qxorm_dep = dependency('QxOrm', required : true, fallback:['QxOrm','qxorm_dep']) +catalogueapi_dep = dependency('CatalogueAPI', required : true, fallback:['CatalogueAPI','CatalogueAPI_dep']) + gui_moc_headers = [ 'include/DataSource/DataSourceWidget.h', 'include/Settings/SqpSettingsDialog.h', @@ -103,7 +106,9 @@ gui_sources = [ 'src/Catalogue/CatalogueExplorer.cpp', 'src/Catalogue/CatalogueEventsWidget.cpp', 'src/Catalogue/CatalogueSideBarWidget.cpp', - 'src/Catalogue/CatalogueInspectorWidget.cpp' + 'src/Catalogue/CatalogueInspectorWidget.cpp', + 'src/Catalogue/CatalogueTreeWidgetItem.cpp', + 'src/Catalogue/CatalogueEventsTableModel.cpp' ] gui_inc = include_directories(['include']) @@ -112,11 +117,11 @@ sciqlop_gui_lib = library('sciqlopgui', gui_sources, gui_moc_files, include_directories : [gui_inc], - dependencies : [ qt5printsupport, qt5gui, qt5widgets, qt5svg, sciqlop_core], + dependencies : [ qt5printsupport, qt5gui, qt5widgets, qt5svg, sciqlop_core, catalogueapi_dep], install : true ) sciqlop_gui = declare_dependency(link_with : sciqlop_gui_lib, include_directories : gui_inc, - dependencies : [qt5printsupport, qt5gui, qt5widgets, qt5svg, sciqlop_core]) + dependencies : [qt5printsupport, qt5gui, qt5widgets, qt5svg, sciqlop_core, catalogueapi_dep]) diff --git a/gui/resources/icones/discard.png b/gui/resources/icones/discard.png new file mode 100644 index 0000000000000000000000000000000000000000..bfc6b097e9fa0c1093924faeca285fd4cf9c262d GIT binary patch literal 1864 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 zohpImp-f1t9HZicones/allEvents.png icones/trash.png icones/database.png + icones/save.png + icones/discard.png diff --git a/gui/src/Catalogue/CatalogueEventsTableModel.cpp b/gui/src/Catalogue/CatalogueEventsTableModel.cpp new file mode 100644 index 0000000..54994b7 --- /dev/null +++ b/gui/src/Catalogue/CatalogueEventsTableModel.cpp @@ -0,0 +1,185 @@ +#include "Catalogue/CatalogueEventsTableModel.h" + +#include +#include +#include +#include +#include +#include +#include +#include