##// END OF EJS Templates
Display catalogues and events with CatalogueAPI
trabillard -
r1162:9abcd350a712
parent child
Show More
@@ -0,0 +1,22
1 #ifndef SCIQLOP_CATALOGUETREEWIDGETITEM_H
2 #define SCIQLOP_CATALOGUETREEWIDGETITEM_H
3
4 #include <Common/spimpl.h>
5 #include <QTreeWidgetItem>
6
7 #include <DBCatalogue.h>
8
9
10 class CatalogueTreeWidgetItem : public QTreeWidgetItem {
11 public:
12 CatalogueTreeWidgetItem(DBCatalogue catalogue, int type = QTreeWidgetItem::Type);
13
14 QVariant data(int column, int role) const override;
15 DBCatalogue catalogue() const;
16
17 private:
18 class CatalogueTreeWidgetItemPrivate;
19 spimpl::unique_impl_ptr<CatalogueTreeWidgetItemPrivate> impl;
20 };
21
22 #endif // SCIQLOP_CATALOGUETREEWIDGETITEM_H
@@ -0,0 +1,32
1 #include "Catalogue/CatalogueTreeWidgetItem.h"
2
3 struct CatalogueTreeWidgetItem::CatalogueTreeWidgetItemPrivate {
4
5 DBCatalogue m_Catalogue;
6
7 CatalogueTreeWidgetItemPrivate(DBCatalogue catalogue) : m_Catalogue(catalogue) {}
8 };
9
10
11 CatalogueTreeWidgetItem::CatalogueTreeWidgetItem(DBCatalogue catalogue, int type)
12 : QTreeWidgetItem(type),
13 impl{spimpl::make_unique_impl<CatalogueTreeWidgetItemPrivate>(catalogue)}
14 {
15 }
16
17 QVariant CatalogueTreeWidgetItem::data(int column, int role) const
18 {
19 switch (role) {
20 case Qt::DisplayRole:
21 return impl->m_Catalogue.getName();
22 default:
23 break;
24 }
25
26 return QTreeWidgetItem::data(column, role);
27 }
28
29 DBCatalogue CatalogueTreeWidgetItem::catalogue() const
30 {
31 return impl->m_Catalogue;
32 }
@@ -1,169 +1,179
1 1
2 2 ## gui - CMakeLists.txt
3 3 STRING(TOLOWER ${CMAKE_PROJECT_NAME} LIBRARY_PREFFIX)
4 4 SET(SQPGUI_LIBRARY_NAME "${LIBRARY_PREFFIX}_gui${DEBUG_SUFFIX}")
5 5 SET(SOURCES_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src")
6 6 SET(INCLUDES_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include")
7 7 SET(UI_FOLDER "${CMAKE_CURRENT_SOURCE_DIR}/ui")
8 8 SET(RES_FOLDER "${CMAKE_CURRENT_SOURCE_DIR}/resources")
9 9
10 10 # Include gui directory
11 11 include_directories("${INCLUDES_DIR}")
12 12 include_directories("${CMAKE_CURRENT_BINARY_DIR}")
13 13
14 14 # Set a variable to display a warning in the version files.
15 15 SET(SCIQLOP_CMAKE_GENERATION_WARNING "DON'T CHANGE THIS FILE. AUTOGENERATED BY CMAKE.")
16 16
17 17 #
18 18 # Find Qt modules
19 19 #
20 20 SCIQLOP_FIND_QT(Core Widgets PrintSupport)
21 21
22 22 #
23 23 # Find dependent libraries
24 24 # ========================
25 25 find_package(sciqlop-core)
26 26
27 27 SET(LIBRARIES ${SCIQLOP-CORE_LIBRARIES})
28 28
29 29 INCLUDE_DIRECTORIES(${SCIQLOP-CORE_INCLUDE_DIR})
30 30
31 31 # Add sqpcore to the list of libraries to use
32 32 list(APPEND LIBRARIES ${SQPCORE_LIBRARY_NAME})
33 33
34 34 # Add dependent shared libraries
35 35 list(APPEND SHARED_LIBRARIES ${SQPCORE_SHARED_LIBRARIES})
36 36
37 37
38 38 # Ui files
39 39 FILE (GLOB_RECURSE PROJECT_FORMS ${UI_FOLDER}/*.ui)
40 40
41 41 # Resources files
42 42 FILE (GLOB_RECURSE PROJECT_RESOURCES ${RES_FOLDER}/*.qrc)
43 43
44 44 #
45 45 # Compile the library library
46 46 #
47 47 FILE (GLOB_RECURSE MODULE_SOURCES
48 48 ${INCLUDES_DIR}/*.h
49 49 ${SOURCES_DIR}/*.c
50 50 ${SOURCES_DIR}/*.cpp
51 51 ${SOURCES_DIR}/*.h
52 52 ${PROJECT_FORMS})
53 53
54 54 QT5_ADD_RESOURCES(RCC_HDRS
55 55 ${PROJECT_RESOURCES}
56 56 )
57 57
58 58 QT5_WRAP_UI(UIS_HDRS
59 59 ${PROJECT_FORMS}
60 60 )
61 61
62 62
63 63 ADD_LIBRARY(${SQPGUI_LIBRARY_NAME} ${MODULE_SOURCES} ${UIS_HDRS} ${RCC_HDRS})
64 64 set_property(TARGET ${SQPGUI_LIBRARY_NAME} PROPERTY CXX_STANDARD 14)
65 65 set_property(TARGET ${SQPGUI_LIBRARY_NAME} PROPERTY CXX_STANDARD_REQUIRED ON)
66 66
67 67 TARGET_LINK_LIBRARIES(${SQPGUI_LIBRARY_NAME} ${LIBRARIES})
68 68 qt5_use_modules(${SQPGUI_LIBRARY_NAME} Core Widgets PrintSupport)
69 69
70 70
71 71 INSTALL(TARGETS ${SQPGUI_LIBRARY_NAME}
72 72 RUNTIME DESTINATION ${INSTALL_BINARY_DIR}
73 73 LIBRARY DESTINATION ${INSTALL_LIBRARY_DIR}
74 74 ARCHIVE DESTINATION ${INSTALL_LIBRARY_DIR}
75 75 )
76 76 add_dependencies(${SQPGUI_LIBRARY_NAME} ${SQPCORE_LIBRARY_NAME})
77 77
78 # Find CATALOGUE_API
79 include_directories("${CATALOGUEAPI_INCLUDE}")
80 TARGET_LINK_LIBRARIES(${SQPGUI_LIBRARY_NAME} ${CATALOGUEAPI_LIBRARIES})
81 INSTALL(TARGETS ${SQPGUI_LIBRARY_NAME}
82 RUNTIME DESTINATION ${INSTALL_BINARY_DIR}
83 LIBRARY DESTINATION ${INSTALL_LIBRARY_DIR}
84 ARCHIVE DESTINATION ${INSTALL_LIBRARY_DIR}
85 )
86
87 add_dependencies(${SQPGUI_LIBRARY_NAME} CatalogueAPI)
78 88
79 89 # From cmake documentation: http://www.cmake.org/cmake/help/v3.0/manual/cmake-buildsystem.7.html
80 90 # Entries in the COMPILE_DEFINITIONS are prefixed with -D or /D and added to the compile line in an unspecified order.
81 91 # The DEFINE_SYMBOL target property is also added as a compile definition as a special convenience case for SHARED and MODULE library targets
82 92 IF(BUILD_SHARED_LIBS)
83 93 SET_TARGET_PROPERTIES(${SQPGUI_LIBRARY_NAME} PROPERTIES COMPILE_DEFINITIONS "SCIQLOP_EXPORT")
84 94 ELSE()
85 95 TARGET_COMPILE_DEFINITIONS(${SQPGUI_LIBRARY_NAME} PUBLIC "SCIQLOP_STATIC_LIBRARIES")
86 96 ENDIF()
87 97
88 98 # Set the variable to parent scope so that the other projects can copy the
89 99 # dependent shared libraries
90 100 SCIQLOP_SET_TO_PARENT_SCOPE(SQPGUI_LIBRARY_NAME)
91 101
92 102 # Copy extern shared libraries to the lib folder
93 103 SCIQLOP_COPY_TO_TARGET(LIBRARY ${SQPGUI_LIBRARY_NAME})
94 104
95 105 # Add the files to the list of files to be analyzed
96 106 LIST(APPEND CHECKSTYLE_INPUT_FILES ${MODULE_SOURCES})
97 107 SCIQLOP_SET_TO_PARENT_SCOPE(CHECKSTYLE_INPUT_FILES)
98 108 # Vera++ exclusion files
99 109 LIST(APPEND CHECKSTYLE_EXCLUSION_FILES ${CMAKE_CURRENT_SOURCE_DIR}/vera-exclusions/exclusions.txt)
100 110 SCIQLOP_SET_TO_PARENT_SCOPE(CHECKSTYLE_EXCLUSION_FILES)
101 111
102 112 #
103 113 # Compile the tests
104 114 #
105 115 IF(BUILD_TESTS)
106 116 INCLUDE_DIRECTORIES(${SOURCES_DIR})
107 117 FILE (GLOB_RECURSE TESTS_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/Test*.cpp)
108 118 FILE (GLOB_RECURSE TESTS_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/Test*.h)
109 119 SET( TEST_LIBRARIES ${SQPGUI_LIBRARY_NAME})
110 120
111 121 FOREACH( testFile ${TESTS_SOURCES} )
112 122 GET_FILENAME_COMPONENT( testDirectory ${testFile} DIRECTORY )
113 123 GET_FILENAME_COMPONENT( testName ${testFile} NAME_WE )
114 124
115 125 # Add to the list of sources files all the sources in the same
116 126 # directory that aren't another test
117 127 FILE (GLOB currentTestSources
118 128 ${testDirectory}/*.c
119 129 ${testDirectory}/*.cpp
120 130 ${testDirectory}/*.h)
121 131 LIST (REMOVE_ITEM currentTestSources ${TESTS_SOURCES})
122 132 # LIST (REMOVE_ITEM currentTestSources ${TESTS_HEADERS})
123 133
124 134 ADD_EXECUTABLE(${testName} ${testFile} ${currentTestSources})
125 135 set_property(TARGET ${testName} PROPERTY CXX_STANDARD 14)
126 136 set_property(TARGET ${testName} PROPERTY CXX_STANDARD_REQUIRED ON)
127 137 TARGET_LINK_LIBRARIES( ${testName} ${TEST_LIBRARIES} )
128 138 qt5_use_modules(${testName} Test)
129 139
130 140 ADD_TEST( NAME ${testName} COMMAND ${testName} )
131 141
132 142 SCIQLOP_COPY_TO_TARGET(RUNTIME ${testName} ${EXTERN_SHARED_LIBRARIES})
133 143 ENDFOREACH( testFile )
134 144
135 145 LIST(APPEND testFilesToFormat ${TESTS_SOURCES})
136 146 LIST(APPEND testFilesToFormat ${TESTS_HEADERS})
137 147 LIST(APPEND FORMATTING_INPUT_FILES ${testFilesToFormat})
138 148 SCIQLOP_SET_TO_PARENT_SCOPE(FORMATTING_INPUT_FILES)
139 149 ENDIF(BUILD_TESTS)
140 150
141 151 #
142 152 # Set the files that must be formatted by clang-format.
143 153 #
144 154 LIST (APPEND FORMATTING_INPUT_FILES ${MODULE_SOURCES})
145 155 SCIQLOP_SET_TO_PARENT_SCOPE(FORMATTING_INPUT_FILES)
146 156
147 157 #
148 158 # Set the directories that doxygen must browse to generate the
149 159 # documentation.
150 160 #
151 161 # Source directories:
152 162 LIST (APPEND DOXYGEN_INPUT_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/docs")
153 163 LIST (APPEND DOXYGEN_INPUT_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/src")
154 164 SCIQLOP_SET_TO_PARENT_SCOPE(DOXYGEN_INPUT_DIRS)
155 165 # Source directories to exclude from the documentation generation
156 166 #LIST (APPEND DOXYGEN_EXCLUDE_PATTERNS "${CMAKE_CURRENT_SOURCE_DIR}/path/to/subdir/*")
157 167 SCIQLOP_SET_TO_PARENT_SCOPE(DOXYGEN_EXCLUDE_PATTERNS)
158 168
159 169 #
160 170 # Set the directories with the sources to analyze and propagate the
161 171 # modification to the parent scope
162 172 #
163 173 # Source directories to analyze:
164 174 LIST (APPEND ANALYSIS_INPUT_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/src")
165 175 LIST (APPEND ANALYSIS_INPUT_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/tests")
166 176 SCIQLOP_SET_TO_PARENT_SCOPE(ANALYSIS_INPUT_DIRS)
167 177 # Source directories to exclude from the analysis
168 178 #LIST (APPEND ANALYSIS_EXCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/path/to/subdir")
169 179 SCIQLOP_SET_TO_PARENT_SCOPE(ANALYSIS_EXCLUDE_DIRS)
@@ -1,31 +1,34
1 1 #ifndef SCIQLOP_CATALOGUEEVENTSWIDGET_H
2 2 #define SCIQLOP_CATALOGUEEVENTSWIDGET_H
3 3
4 4 #include <Common/spimpl.h>
5 5 #include <QWidget>
6 6
7 class DBCatalogue;
8 class DBEvent;
9
7 10 namespace Ui {
8 11 class CatalogueEventsWidget;
9 12 }
10 13
11 14 class CatalogueEventsWidget : public QWidget {
12 15 Q_OBJECT
13 16
14 17 signals:
15 void eventSelected(const QString &event);
18 void eventSelected(const DBEvent &event);
16 19
17 20 public:
18 21 explicit CatalogueEventsWidget(QWidget *parent = 0);
19 22 virtual ~CatalogueEventsWidget();
20 23
21 24 public slots:
22 void populateWithCatalogue(const QString &catalogue);
25 void populateWithCatalogue(const DBCatalogue &catalogue);
23 26
24 27 private:
25 28 Ui::CatalogueEventsWidget *ui;
26 29
27 30 class CatalogueEventsWidgetPrivate;
28 31 spimpl::unique_impl_ptr<CatalogueEventsWidgetPrivate> impl;
29 32 };
30 33
31 34 #endif // SCIQLOP_CATALOGUEEVENTSWIDGET_H
@@ -1,32 +1,35
1 1 #ifndef SCIQLOP_CATALOGUEINSPECTORWIDGET_H
2 2 #define SCIQLOP_CATALOGUEINSPECTORWIDGET_H
3 3
4 4 #include <QWidget>
5 5
6 6 namespace Ui {
7 7 class CatalogueInspectorWidget;
8 8 }
9 9
10 class DBCatalogue;
11 class DBEvent;
12
10 13 class CatalogueInspectorWidget : public QWidget {
11 14 Q_OBJECT
12 15
13 16 public:
14 17 explicit CatalogueInspectorWidget(QWidget *parent = 0);
15 18 virtual ~CatalogueInspectorWidget();
16 19
17 20 /// Enum matching the pages inside the stacked widget
18 21 enum class Page { Empty, CatalogueProperties, EventProperties };
19 22
20 23 Page currentPage() const;
21 24
22 void setEvent(const QString &event);
23 void setCatalogue(const QString &catalogue);
25 void setEvent(const DBEvent &event);
26 void setCatalogue(const DBCatalogue &catalogue);
24 27
25 28 public slots:
26 29 void showPage(Page page);
27 30
28 31 private:
29 32 Ui::CatalogueInspectorWidget *ui;
30 33 };
31 34
32 35 #endif // SCIQLOP_CATALOGUEINSPECTORWIDGET_H
@@ -1,31 +1,33
1 1 #ifndef SCIQLOP_CATALOGUESIDEBARWIDGET_H
2 2 #define SCIQLOP_CATALOGUESIDEBARWIDGET_H
3 3
4 4 #include <Common/spimpl.h>
5 5 #include <QTreeWidgetItem>
6 6 #include <QWidget>
7 7
8 #include <DBCatalogue.h>
9
8 10 namespace Ui {
9 11 class CatalogueSideBarWidget;
10 12 }
11 13
12 14 class CatalogueSideBarWidget : public QWidget {
13 15 Q_OBJECT
14 16
15 17 signals:
16 void catalogueSelected(const QString &catalogue);
18 void catalogueSelected(const DBCatalogue &catalogue);
17 19 void allEventsSelected();
18 20 void trashSelected();
19 21
20 22 public:
21 23 explicit CatalogueSideBarWidget(QWidget *parent = 0);
22 24 virtual ~CatalogueSideBarWidget();
23 25
24 26 private:
25 27 Ui::CatalogueSideBarWidget *ui;
26 28
27 29 class CatalogueSideBarWidgetPrivate;
28 30 spimpl::unique_impl_ptr<CatalogueSideBarWidgetPrivate> impl;
29 31 };
30 32
31 33 #endif // SCIQLOP_CATALOGUESIDEBARWIDGET_H
@@ -1,122 +1,126
1 1
2 qxorm_dep = dependency('QxOrm', required : true, fallback:['QxOrm','qxorm_dep'])
3 catalogueapi_dep = dependency('CatalogueAPI', required : true, fallback:['CatalogueAPI','CatalogueAPI_dep'])
4
2 5 gui_moc_headers = [
3 6 'include/DataSource/DataSourceWidget.h',
4 7 'include/Settings/SqpSettingsDialog.h',
5 8 'include/Settings/SqpSettingsGeneralWidget.h',
6 9 'include/SidePane/SqpSidePane.h',
7 10 'include/SqpApplication.h',
8 11 'include/DragAndDrop/DragDropScroller.h',
9 12 'include/DragAndDrop/DragDropTabSwitcher.h',
10 13 'include/TimeWidget/TimeWidget.h',
11 14 'include/Variable/VariableInspectorWidget.h',
12 15 'include/Variable/RenameVariableDialog.h',
13 16 'include/Visualization/qcustomplot.h',
14 17 'include/Visualization/VisualizationGraphWidget.h',
15 18 'include/Visualization/VisualizationTabWidget.h',
16 19 'include/Visualization/VisualizationWidget.h',
17 20 'include/Visualization/VisualizationZoneWidget.h',
18 21 'include/Visualization/VisualizationDragDropContainer.h',
19 22 'include/Visualization/VisualizationDragWidget.h',
20 23 'include/Visualization/ColorScaleEditor.h',
21 24 'include/Actions/SelectionZoneAction.h',
22 25 'include/Visualization/VisualizationMultiZoneSelectionDialog.h',
23 26 'include/Catalogue/CatalogueExplorer.h',
24 27 'include/Catalogue/CatalogueEventsWidget.h',
25 28 'include/Catalogue/CatalogueSideBarWidget.h',
26 29 'include/Catalogue/CatalogueInspectorWidget.h'
27 30 ]
28 31
29 32 gui_ui_files = [
30 33 'ui/DataSource/DataSourceWidget.ui',
31 34 'ui/Settings/SqpSettingsDialog.ui',
32 35 'ui/Settings/SqpSettingsGeneralWidget.ui',
33 36 'ui/SidePane/SqpSidePane.ui',
34 37 'ui/TimeWidget/TimeWidget.ui',
35 38 'ui/Variable/VariableInspectorWidget.ui',
36 39 'ui/Variable/RenameVariableDialog.ui',
37 40 'ui/Variable/VariableMenuHeaderWidget.ui',
38 41 'ui/Visualization/VisualizationGraphWidget.ui',
39 42 'ui/Visualization/VisualizationTabWidget.ui',
40 43 'ui/Visualization/VisualizationWidget.ui',
41 44 'ui/Visualization/VisualizationZoneWidget.ui',
42 45 'ui/Visualization/ColorScaleEditor.ui',
43 46 'ui/Visualization/VisualizationMultiZoneSelectionDialog.ui',
44 47 'ui/Catalogue/CatalogueExplorer.ui',
45 48 'ui/Catalogue/CatalogueEventsWidget.ui',
46 49 'ui/Catalogue/CatalogueSideBarWidget.ui',
47 50 'ui/Catalogue/CatalogueInspectorWidget.ui'
48 51 ]
49 52
50 53 gui_qresources = ['resources/sqpguiresources.qrc']
51 54
52 55 gui_moc_files = qt5.preprocess(moc_headers : gui_moc_headers,
53 56 ui_files : gui_ui_files,
54 57 qresources : gui_qresources)
55 58
56 59 gui_sources = [
57 60 'src/SqpApplication.cpp',
58 61 'src/DragAndDrop/DragDropGuiController.cpp',
59 62 'src/DragAndDrop/DragDropScroller.cpp',
60 63 'src/DragAndDrop/DragDropTabSwitcher.cpp',
61 64 'src/Common/ColorUtils.cpp',
62 65 'src/Common/VisualizationDef.cpp',
63 66 'src/DataSource/DataSourceTreeWidgetItem.cpp',
64 67 'src/DataSource/DataSourceTreeWidgetHelper.cpp',
65 68 'src/DataSource/DataSourceWidget.cpp',
66 69 'src/DataSource/DataSourceTreeWidget.cpp',
67 70 'src/Settings/SqpSettingsDialog.cpp',
68 71 'src/Settings/SqpSettingsGeneralWidget.cpp',
69 72 'src/SidePane/SqpSidePane.cpp',
70 73 'src/TimeWidget/TimeWidget.cpp',
71 74 'src/Variable/VariableInspectorWidget.cpp',
72 75 'src/Variable/VariableInspectorTableView.cpp',
73 76 'src/Variable/VariableMenuHeaderWidget.cpp',
74 77 'src/Variable/RenameVariableDialog.cpp',
75 78 'src/Visualization/VisualizationGraphHelper.cpp',
76 79 'src/Visualization/VisualizationGraphRenderingDelegate.cpp',
77 80 'src/Visualization/VisualizationGraphWidget.cpp',
78 81 'src/Visualization/VisualizationTabWidget.cpp',
79 82 'src/Visualization/VisualizationWidget.cpp',
80 83 'src/Visualization/VisualizationZoneWidget.cpp',
81 84 'src/Visualization/qcustomplot.cpp',
82 85 'src/Visualization/QCustomPlotSynchronizer.cpp',
83 86 'src/Visualization/operations/FindVariableOperation.cpp',
84 87 'src/Visualization/operations/GenerateVariableMenuOperation.cpp',
85 88 'src/Visualization/operations/MenuBuilder.cpp',
86 89 'src/Visualization/operations/RemoveVariableOperation.cpp',
87 90 'src/Visualization/operations/RescaleAxeOperation.cpp',
88 91 'src/Visualization/VisualizationDragDropContainer.cpp',
89 92 'src/Visualization/VisualizationDragWidget.cpp',
90 93 'src/Visualization/AxisRenderingUtils.cpp',
91 94 'src/Visualization/PlottablesRenderingUtils.cpp',
92 95 'src/Visualization/MacScrollBarStyle.cpp',
93 96 'src/Visualization/VisualizationCursorItem.cpp',
94 97 'src/Visualization/ColorScaleEditor.cpp',
95 98 'src/Visualization/SqpColorScale.cpp',
96 99 'src/Visualization/QCPColorMapIterator.cpp',
97 100 'src/Visualization/VisualizationSelectionZoneItem.cpp',
98 101 'src/Visualization/VisualizationSelectionZoneManager.cpp',
99 102 'src/Actions/SelectionZoneAction.cpp',
100 103 'src/Actions/ActionsGuiController.cpp',
101 104 'src/Visualization/VisualizationActionManager.cpp',
102 105 'src/Visualization/VisualizationMultiZoneSelectionDialog.cpp',
103 106 'src/Catalogue/CatalogueExplorer.cpp',
104 107 'src/Catalogue/CatalogueEventsWidget.cpp',
105 108 'src/Catalogue/CatalogueSideBarWidget.cpp',
106 'src/Catalogue/CatalogueInspectorWidget.cpp'
109 'src/Catalogue/CatalogueInspectorWidget.cpp',
110 'src/Catalogue/CatalogueTreeWidgetItem.cpp'
107 111 ]
108 112
109 113 gui_inc = include_directories(['include'])
110 114
111 115 sciqlop_gui_lib = library('sciqlopgui',
112 116 gui_sources,
113 117 gui_moc_files,
114 118 include_directories : [gui_inc],
115 dependencies : [ qt5printsupport, qt5gui, qt5widgets, qt5svg, sciqlop_core],
119 dependencies : [ qt5printsupport, qt5gui, qt5widgets, qt5svg, sciqlop_core, catalogueapi_dep],
116 120 install : true
117 121 )
118 122
119 123 sciqlop_gui = declare_dependency(link_with : sciqlop_gui_lib,
120 124 include_directories : gui_inc,
121 dependencies : [qt5printsupport, qt5gui, qt5widgets, qt5svg, sciqlop_core])
125 dependencies : [qt5printsupport, qt5gui, qt5widgets, qt5svg, sciqlop_core, catalogueapi_dep])
122 126
@@ -1,100 +1,115
1 1 #include "Catalogue/CatalogueEventsWidget.h"
2 2 #include "ui_CatalogueEventsWidget.h"
3 3
4 #include <QtDebug>
4 #include <Catalogue/CatalogueController.h>
5 #include <CatalogueDao.h>
6 #include <DBCatalogue.h>
7 #include <SqpApplication.h>
8
9
10 /// Format of the dates appearing in the label of a cursor
11 const auto DATETIME_FORMAT = QStringLiteral("yyyy/MM/dd hh:mm:ss");
5 12
6 13 struct CatalogueEventsWidget::CatalogueEventsWidgetPrivate {
7 14 void addEventItem(const QStringList &data, QTableWidget *tableWidget);
8 15
9 16 enum class Column { Event, TStart, TEnd, Tags, Product, NbColumn };
10 17 QStringList columnNames() { return QStringList{"Event", "TStart", "TEnd", "Tags", "Product"}; }
18
19 QVector<DBEvent> m_Events;
11 20 };
12 21
13 22
14 23 CatalogueEventsWidget::CatalogueEventsWidget(QWidget *parent)
15 24 : QWidget(parent),
16 25 ui(new Ui::CatalogueEventsWidget),
17 26 impl{spimpl::make_unique_impl<CatalogueEventsWidgetPrivate>()}
18 27 {
19 28 ui->setupUi(this);
20 29
21 30 connect(ui->btnTime, &QToolButton::clicked, [this](auto checked) {
22 31 if (checked) {
23 32 ui->btnChart->setChecked(false);
24 33 }
25 34 });
26 35
27 36 connect(ui->btnChart, &QToolButton::clicked, [this](auto checked) {
28 37 if (checked) {
29 38 ui->btnTime->setChecked(false);
30 39 }
31 40 });
32 41
33 42 connect(ui->tableWidget, &QTableWidget::cellClicked, [this](auto row, auto column) {
34 auto event = ui->tableWidget->item(row, 0)->text();
43 auto event = impl->m_Events.value(row);
35 44 emit this->eventSelected(event);
36 45 });
37 46
38 47 connect(ui->tableWidget, &QTableWidget::currentItemChanged,
39 48 [this](auto current, auto previous) {
40 49 if (current && current->row() >= 0) {
41 auto event = ui->tableWidget->item(current->row(), 0)->text();
50 auto event = impl->m_Events.value(current->row());
42 51 emit this->eventSelected(event);
43 52 }
44 53 });
45 54
46 55 connect(ui->tableWidget, &QTableWidget::itemSelectionChanged, [this]() {
47 56 auto selection = ui->tableWidget->selectedRanges();
48 57 auto isNotMultiSelection
49 58 = selection.isEmpty() || (selection.count() == 1 && selection.first().rowCount() == 1);
50 59 ui->btnChart->setEnabled(isNotMultiSelection);
51 60 ui->btnTime->setEnabled(isNotMultiSelection);
52 61 });
53 62
54 63 Q_ASSERT(impl->columnNames().count() == (int)CatalogueEventsWidgetPrivate::Column::NbColumn);
55 64 ui->tableWidget->setColumnCount((int)CatalogueEventsWidgetPrivate::Column::NbColumn);
56 65 ui->tableWidget->setHorizontalHeaderLabels(impl->columnNames());
57 66 ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
58 67 ui->tableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch);
59 68 ui->tableWidget->horizontalHeader()->setSortIndicatorShown(true);
60 69 }
61 70
62 71 CatalogueEventsWidget::~CatalogueEventsWidget()
63 72 {
64 73 delete ui;
65 74 }
66 75
67 void CatalogueEventsWidget::populateWithCatalogue(const QString &catalogue)
76 void CatalogueEventsWidget::populateWithCatalogue(const DBCatalogue &catalogue)
68 77 {
69 78 ui->tableWidget->clearContents();
70 79 ui->tableWidget->setRowCount(0);
71 80
72 // TODO
73 impl->addEventItem(
74 {catalogue + " - Event 1", "12/12/2012 12:12", "12/12/2042 12:52", "cloud", "mfi/b_gse42"},
75 ui->tableWidget);
76 impl->addEventItem(
77 {catalogue + " - Event 2", "12/12/2012 12:10", "12/12/2042 12:42", "Acloud", "mfi/b_gse1"},
78 ui->tableWidget);
79 impl->addEventItem(
80 {catalogue + " - Event 3", "12/12/2012 12:22", "12/12/2042 12:12", "Gcloud", "mfi/b_gse2"},
81 ui->tableWidget);
82 impl->addEventItem(
83 {catalogue + " - Event 4", "12/12/2012 12:00", "12/12/2042 12:62", "Bcloud", "mfi/b_gse3"},
84 ui->tableWidget);
81 auto &dao = sqpApp->catalogueController().getDao();
82 auto events = dao.getCatalogueEvents(catalogue);
83
84 for (auto event : events) {
85 impl->m_Events << event;
86
87 auto tags = event.getTags();
88 QString tagList;
89 for (auto tag : tags) {
90 tagList += tag.getName();
91 tagList += ' ';
92 }
93
94 impl->addEventItem({event.getName(),
95 DateUtils::dateTime(event.getTStart()).toString(DATETIME_FORMAT),
96 DateUtils::dateTime(event.getTEnd()).toString(DATETIME_FORMAT), tagList,
97 event.getProduct()},
98 ui->tableWidget);
99 }
85 100 }
86 101
87 102 void CatalogueEventsWidget::CatalogueEventsWidgetPrivate::addEventItem(const QStringList &data,
88 103 QTableWidget *tableWidget)
89 104 {
90 105 tableWidget->setSortingEnabled(false);
91 106 auto row = tableWidget->rowCount();
92 107 tableWidget->setRowCount(row + 1);
93 108
94 109 for (auto i = 0; i < (int)Column::NbColumn; ++i) {
95 110 auto item = new QTableWidgetItem(data.value(i));
96 111 item->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
97 112 tableWidget->setItem(row, i, item);
98 113 }
99 114 tableWidget->setSortingEnabled(true);
100 115 }
@@ -1,22 +1,25
1 1 #include "Catalogue/CatalogueExplorer.h"
2 2 #include "ui_CatalogueExplorer.h"
3 3
4 #include <DBCatalogue.h>
5 #include <DBEvent.h>
6
4 7 CatalogueExplorer::CatalogueExplorer(QWidget *parent)
5 8 : QDialog(parent, Qt::Dialog | Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint),
6 9 ui(new Ui::CatalogueExplorer)
7 10 {
8 11 ui->setupUi(this);
9 12
10 connect(ui->catalogues, &CatalogueSideBarWidget::catalogueSelected, [this](auto name) {
11 ui->inspector->setCatalogue(name);
12 ui->events->populateWithCatalogue(name);
13 connect(ui->catalogues, &CatalogueSideBarWidget::catalogueSelected, [this](auto catalogue) {
14 ui->inspector->setCatalogue(catalogue);
15 ui->events->populateWithCatalogue(catalogue);
13 16 });
14 17
15 18 connect(ui->events, &CatalogueEventsWidget::eventSelected,
16 [this](auto name) { ui->inspector->setEvent(name); });
19 [this](auto event) { ui->inspector->setEvent(event); });
17 20 }
18 21
19 22 CatalogueExplorer::~CatalogueExplorer()
20 23 {
21 24 delete ui;
22 25 }
@@ -1,36 +1,56
1 1 #include "Catalogue/CatalogueInspectorWidget.h"
2 2 #include "ui_CatalogueInspectorWidget.h"
3 3
4 #include <Common/DateUtils.h>
5 #include <DBCatalogue.h>
6 #include <DBEvent.h>
7 #include <DBTag.h>
8
4 9 CatalogueInspectorWidget::CatalogueInspectorWidget(QWidget *parent)
5 10 : QWidget(parent), ui(new Ui::CatalogueInspectorWidget)
6 11 {
7 12 ui->setupUi(this);
8 13 showPage(Page::Empty);
9 14 }
10 15
11 16 CatalogueInspectorWidget::~CatalogueInspectorWidget()
12 17 {
13 18 delete ui;
14 19 }
15 20
16 21 void CatalogueInspectorWidget::showPage(CatalogueInspectorWidget::Page page)
17 22 {
18 23 ui->stackedWidget->setCurrentIndex(static_cast<int>(page));
19 24 }
20 25
21 26 CatalogueInspectorWidget::Page CatalogueInspectorWidget::currentPage() const
22 27 {
23 28 return static_cast<Page>(ui->stackedWidget->currentIndex());
24 29 }
25 30
26 void CatalogueInspectorWidget::setEvent(const QString &event)
31 void CatalogueInspectorWidget::setEvent(const DBEvent &event)
27 32 {
28 33 showPage(Page::EventProperties);
29 ui->leEventName->setText(event);
34 ui->leEventName->setText(event.getName());
35 ui->leEventMission->setText(event.getMission());
36 ui->leEventProduct->setText(event.getProduct());
37
38 QString tagList;
39 auto tags = const_cast<DBEvent *>(&event)->getTags();
40 for (auto tag : tags) {
41 tagList += tag.getName();
42 tagList += ' ';
43 }
44
45 ui->leEventTags->setText(tagList);
46
47 ui->dateTimeEventTStart->setDateTime(DateUtils::dateTime(event.getTStart()));
48 ui->dateTimeEventTEnd->setDateTime(DateUtils::dateTime(event.getTEnd()));
30 49 }
31 50
32 void CatalogueInspectorWidget::setCatalogue(const QString &catalogue)
51 void CatalogueInspectorWidget::setCatalogue(const DBCatalogue &catalogue)
33 52 {
34 53 showPage(Page::CatalogueProperties);
35 ui->leCatalogueName->setText(catalogue);
54 ui->leCatalogueName->setText(catalogue.getName());
55 ui->leCatalogueAuthor->setText(catalogue.getAuthor());
36 56 }
@@ -1,101 +1,113
1 1 #include "Catalogue/CatalogueSideBarWidget.h"
2 2 #include "ui_CatalogueSideBarWidget.h"
3 #include <SqpApplication.h>
4
5 #include <Catalogue/CatalogueController.h>
6 #include <Catalogue/CatalogueTreeWidgetItem.h>
7 #include <CatalogueDao.h>
8 #include <ComparaisonPredicate.h>
9 #include <DBCatalogue.h>
10
3 11
4 12 constexpr auto ALL_EVENT_ITEM_TYPE = QTreeWidgetItem::UserType;
5 13 constexpr auto TRASH_ITEM_TYPE = QTreeWidgetItem::UserType + 1;
6 14 constexpr auto CATALOGUE_ITEM_TYPE = QTreeWidgetItem::UserType + 2;
7 15 constexpr auto DATABASE_ITEM_TYPE = QTreeWidgetItem::UserType + 3;
8 16
9 17
10 18 struct CatalogueSideBarWidget::CatalogueSideBarWidgetPrivate {
19
20 QHash<QTreeWidgetItem *, DBCatalogue> m_CatalogueMap;
21
11 22 void configureTreeWidget(QTreeWidget *treeWidget);
12 23 QTreeWidgetItem *addDatabaseItem(const QString &name, QTreeWidget *treeWidget);
13 void addCatalogueItem(const QString &name, QTreeWidgetItem *parentDatabaseItem);
24 void addCatalogueItem(const DBCatalogue &catalogue, QTreeWidgetItem *parentDatabaseItem);
14 25 };
15 26
16 27 CatalogueSideBarWidget::CatalogueSideBarWidget(QWidget *parent)
17 28 : QWidget(parent),
18 29 ui(new Ui::CatalogueSideBarWidget),
19 30 impl{spimpl::make_unique_impl<CatalogueSideBarWidgetPrivate>()}
20 31 {
21 32 ui->setupUi(this);
22 33 impl->configureTreeWidget(ui->treeWidget);
23 34
24 35 auto emitSelection = [this](auto item) {
25 36 switch (item->type()) {
26 37 case CATALOGUE_ITEM_TYPE:
27 emit this->catalogueSelected(item->text(0));
38 emit this->catalogueSelected(
39 static_cast<CatalogueTreeWidgetItem *>(item)->catalogue());
28 40 break;
29 41 case ALL_EVENT_ITEM_TYPE:
30 42 emit this->allEventsSelected();
31 43 break;
32 44 case TRASH_ITEM_TYPE:
33 45 emit this->trashSelected();
34 46 break;
35 47 case DATABASE_ITEM_TYPE:
36 48 default:
37 49 break;
38 50 }
39 51 };
40 52
41 53 connect(ui->treeWidget, &QTreeWidget::itemClicked, emitSelection);
42 54 connect(ui->treeWidget, &QTreeWidget::currentItemChanged, emitSelection);
43 55 }
44 56
45 57 CatalogueSideBarWidget::~CatalogueSideBarWidget()
46 58 {
47 59 delete ui;
48 60 }
49 61
50 62 void CatalogueSideBarWidget::CatalogueSideBarWidgetPrivate::configureTreeWidget(
51 63 QTreeWidget *treeWidget)
52 64 {
53 65 auto allEventsItem = new QTreeWidgetItem({"All Events"}, ALL_EVENT_ITEM_TYPE);
54 66 allEventsItem->setIcon(0, QIcon(":/icones/allEvents.png"));
55 67 treeWidget->addTopLevelItem(allEventsItem);
56 68
57 69 auto trashItem = new QTreeWidgetItem({"Trash"}, TRASH_ITEM_TYPE);
58 70 trashItem->setIcon(0, QIcon(":/icones/trash.png"));
59 71 treeWidget->addTopLevelItem(trashItem);
60 72
61 73 auto separator = new QFrame(treeWidget);
62 74 separator->setFrameShape(QFrame::HLine);
63 75
64 76 auto separatorItem = new QTreeWidgetItem();
65 77 separatorItem->setFlags(Qt::NoItemFlags);
66 78 treeWidget->addTopLevelItem(separatorItem);
67 79 treeWidget->setItemWidget(separatorItem, 0, separator);
68 80
69 81 // Test
70 auto db = addDatabaseItem("Database 1", treeWidget);
71 addCatalogueItem("Catalogue 1", db);
72 addCatalogueItem("Catalogue 2", db);
73 addCatalogueItem("Catalogue 3", db);
74 addCatalogueItem("Catalogue 4", db);
82 auto &dao = sqpApp->catalogueController().getDao();
83 auto allPredicate = std::make_shared<ComparaisonPredicate>(QString{"uniqId"}, "-1",
84 ComparaisonOperation::DIFFERENT);
85
86 auto db = addDatabaseItem("Default", treeWidget);
75 87
76 auto db2 = addDatabaseItem("Database 2", treeWidget);
77 addCatalogueItem("Catalogue A", db2);
78 addCatalogueItem("Catalogue B", db2);
79 addCatalogueItem("Catalogue C", db2);
88 auto catalogues = dao.getCatalogues(allPredicate);
89 for (auto catalogue : catalogues) {
90 addCatalogueItem(catalogue, db);
91 }
80 92
81 93 treeWidget->expandAll();
82 94 }
83 95
84 96 QTreeWidgetItem *
85 97 CatalogueSideBarWidget::CatalogueSideBarWidgetPrivate::addDatabaseItem(const QString &name,
86 98 QTreeWidget *treeWidget)
87 99 {
88 100 auto databaseItem = new QTreeWidgetItem({name}, DATABASE_ITEM_TYPE);
89 101 databaseItem->setIcon(0, QIcon(":/icones/database.png"));
90 102 treeWidget->addTopLevelItem(databaseItem);
91 103
92 104 return databaseItem;
93 105 }
94 106
95 107 void CatalogueSideBarWidget::CatalogueSideBarWidgetPrivate::addCatalogueItem(
96 const QString &name, QTreeWidgetItem *parentDatabaseItem)
108 const DBCatalogue &catalogue, QTreeWidgetItem *parentDatabaseItem)
97 109 {
98 auto catalogueItem = new QTreeWidgetItem({name}, CATALOGUE_ITEM_TYPE);
110 auto catalogueItem = new CatalogueTreeWidgetItem(catalogue, CATALOGUE_ITEM_TYPE);
99 111 catalogueItem->setIcon(0, QIcon(":/icones/catalogue.png"));
100 112 parentDatabaseItem->addChild(catalogueItem);
101 113 }
General Comments 3
Under Review
author

Auto status change to "Under Review"

Approved

Status change > Approved

You need to be logged in to leave comments. Login now