##// END OF EJS Templates
Initial Pybind11 binding experiment working....
Initial Pybind11 binding experiment working. Can open an amda formatted file from Python and get few attributes from ScalarSeries. Loading module from python works. Embedding python interpreter also works. Signed-off-by: Alexis Jeandet <alexis.jeandet@member.fsf.org>

File last commit:

r1315:b20dcec1c57b
r1339:98271eda8c6e
Show More
CatalogueInspectorWidget.cpp
236 lines | 8.6 KiB | text/x-c | CppLexer
/ gui / src / Catalogue / CatalogueInspectorWidget.cpp
Sub widget classes
r1095 #include "Catalogue/CatalogueInspectorWidget.h"
#include "ui_CatalogueInspectorWidget.h"
Display catalogues and events with CatalogueAPI
r1129 #include <Common/DateUtils.h>
#include <DBCatalogue.h>
#include <DBEvent.h>
Edition of event products via the inspector
r1150 #include <DBEventProduct.h>
Display catalogues and events with CatalogueAPI
r1129 #include <DBTag.h>
Edition of catalogues from the inspector
r1147 struct CatalogueInspectorWidget::CatalogueInspectorWidgetPrivate {
std::shared_ptr<DBCatalogue> m_DisplayedCatalogue = nullptr;
std::shared_ptr<DBEvent> m_DisplayedEvent = nullptr;
Edition of event products via the inspector
r1150 std::shared_ptr<DBEventProduct> m_DisplayedEventProduct = nullptr;
Edition of events from the inspector
r1148
void connectCatalogueUpdateSignals(CatalogueInspectorWidget *inspector,
Ui::CatalogueInspectorWidget *ui);
void connectEventUpdateSignals(CatalogueInspectorWidget *inspector,
Ui::CatalogueInspectorWidget *ui);
Edition of catalogues from the inspector
r1147 };
Sub widget classes
r1095 CatalogueInspectorWidget::CatalogueInspectorWidget(QWidget *parent)
Edition of catalogues from the inspector
r1147 : QWidget(parent),
ui(new Ui::CatalogueInspectorWidget),
impl{spimpl::make_unique_impl<CatalogueInspectorWidgetPrivate>()}
Sub widget classes
r1095 {
ui->setupUi(this);
Inspector
r1099 showPage(Page::Empty);
Edition of catalogues from the inspector
r1147
Edition of events from the inspector
r1148 impl->connectCatalogueUpdateSignals(this, ui);
impl->connectEventUpdateSignals(this, ui);
Fix bug time precision with catalogue
r1315
ui->dateTimeEventTStart->setDisplayFormat(DATETIME_FORMAT);
ui->dateTimeEventTEnd->setDisplayFormat(DATETIME_FORMAT);
Edition of events from the inspector
r1148 }
CatalogueInspectorWidget::~CatalogueInspectorWidget()
{
delete ui;
}
void CatalogueInspectorWidget::CatalogueInspectorWidgetPrivate::connectCatalogueUpdateSignals(
CatalogueInspectorWidget *inspector, Ui::CatalogueInspectorWidget *ui)
{
connect(ui->leCatalogueName, &QLineEdit::editingFinished, [ui, inspector, this]() {
if (ui->leCatalogueName->text() != m_DisplayedCatalogue->getName()) {
m_DisplayedCatalogue->setName(ui->leCatalogueName->text());
emit inspector->catalogueUpdated(m_DisplayedCatalogue);
Edition of catalogues from the inspector
r1147 }
});
Edition of events from the inspector
r1148 connect(ui->leCatalogueAuthor, &QLineEdit::editingFinished, [ui, inspector, this]() {
if (ui->leCatalogueAuthor->text() != m_DisplayedCatalogue->getAuthor()) {
m_DisplayedCatalogue->setAuthor(ui->leCatalogueAuthor->text());
emit inspector->catalogueUpdated(m_DisplayedCatalogue);
Edition of catalogues from the inspector
r1147 }
});
Sub widget classes
r1095 }
Edition of events from the inspector
r1148 void CatalogueInspectorWidget::CatalogueInspectorWidgetPrivate::connectEventUpdateSignals(
CatalogueInspectorWidget *inspector, Ui::CatalogueInspectorWidget *ui)
Sub widget classes
r1095 {
Edition of events from the inspector
r1148 connect(ui->leEventName, &QLineEdit::editingFinished, [ui, inspector, this]() {
if (ui->leEventName->text() != m_DisplayedEvent->getName()) {
m_DisplayedEvent->setName(ui->leEventName->text());
emit inspector->eventUpdated(m_DisplayedEvent);
}
});
Edition of tags
r1153 connect(ui->leEventTags, &QLineEdit::editingFinished, [ui, inspector, this]() {
Discard an added event remove it now.
r1260 auto tags = ui->leEventTags->text().split(QRegExp("\\s+"), QString::SkipEmptyParts);
Edition of tags
r1153 std::list<QString> tagNames;
for (auto tag : tags) {
tagNames.push_back(tag);
}
if (m_DisplayedEvent->getTagsNames() != tagNames) {
m_DisplayedEvent->setTagsNames(tagNames);
emit inspector->eventUpdated(m_DisplayedEvent);
}
});
Edition of events from the inspector
r1148 connect(ui->leEventProduct, &QLineEdit::editingFinished, [ui, inspector, this]() {
Edition of event products via the inspector
r1150 if (ui->leEventProduct->text() != m_DisplayedEventProduct->getProductId()) {
Add init of DisplayedEvent. Add save on EventProduct modif
r1226 auto oldProductId = m_DisplayedEventProduct->getProductId();
Edition of event products via the inspector
r1150 m_DisplayedEventProduct->setProductId(ui->leEventProduct->text());
Add init of DisplayedEvent. Add save on EventProduct modif
r1226
auto eventProducts = m_DisplayedEvent->getEventProducts();
for (auto &eventProduct : eventProducts) {
if (eventProduct.getProductId() == oldProductId) {
eventProduct.setProductId(m_DisplayedEventProduct->getProductId());
}
}
m_DisplayedEvent->setEventProducts(eventProducts);
emit inspector->eventUpdated(m_DisplayedEvent);
Edition of event products via the inspector
r1150 }
Edition of events from the inspector
r1148 });
connect(ui->dateTimeEventTStart, &QDateTimeEdit::editingFinished, [ui, inspector, this]() {
Edition of event products via the inspector
r1150 auto time = DateUtils::secondsSinceEpoch(ui->dateTimeEventTStart->dateTime());
if (time != m_DisplayedEventProduct->getTStart()) {
m_DisplayedEventProduct->setTStart(time);
Add init of DisplayedEvent. Add save on EventProduct modif
r1226
auto eventProducts = m_DisplayedEvent->getEventProducts();
for (auto &eventProduct : eventProducts) {
if (eventProduct.getProductId() == m_DisplayedEventProduct->getProductId()) {
eventProduct.setTStart(m_DisplayedEventProduct->getTStart());
}
}
m_DisplayedEvent->setEventProducts(eventProducts);
emit inspector->eventUpdated(m_DisplayedEvent);
Edition of event products via the inspector
r1150 }
Edition of events from the inspector
r1148 });
connect(ui->dateTimeEventTEnd, &QDateTimeEdit::editingFinished, [ui, inspector, this]() {
Edition of event products via the inspector
r1150 auto time = DateUtils::secondsSinceEpoch(ui->dateTimeEventTEnd->dateTime());
if (time != m_DisplayedEventProduct->getTEnd()) {
m_DisplayedEventProduct->setTEnd(time);
Add init of DisplayedEvent. Add save on EventProduct modif
r1226
auto eventProducts = m_DisplayedEvent->getEventProducts();
for (auto &eventProduct : eventProducts) {
if (eventProduct.getProductId() == m_DisplayedEventProduct->getProductId()) {
eventProduct.setTEnd(m_DisplayedEventProduct->getTEnd());
}
}
m_DisplayedEvent->setEventProducts(eventProducts);
emit inspector->eventUpdated(m_DisplayedEvent);
Edition of event products via the inspector
r1150 }
Edition of events from the inspector
r1148 });
Sub widget classes
r1095 }
Inspector
r1099
void CatalogueInspectorWidget::showPage(CatalogueInspectorWidget::Page page)
{
ui->stackedWidget->setCurrentIndex(static_cast<int>(page));
}
CatalogueInspectorWidget::Page CatalogueInspectorWidget::currentPage() const
{
return static_cast<Page>(ui->stackedWidget->currentIndex());
}
Skeleton to fill the inspector with the selection
r1105
Adaptation to the shared pointers of catalogue controller
r1143 void CatalogueInspectorWidget::setEvent(const std::shared_ptr<DBEvent> &event)
Skeleton to fill the inspector with the selection
r1105 {
Edition of catalogues from the inspector
r1147 impl->m_DisplayedEvent = event;
blockSignals(true);
Skeleton to fill the inspector with the selection
r1105 showPage(Page::EventProperties);
Edition of event products via the inspector
r1150 ui->leEventName->setEnabled(true);
Adaptation to the shared pointers of catalogue controller
r1143 ui->leEventName->setText(event->getName());
Edition of event products via the inspector
r1150 ui->leEventProduct->setEnabled(false);
Product field now display products event list instead of only its size
r1310
auto eventProducts = event->getEventProducts();
QStringList eventProductList;
for (auto evtProduct : eventProducts) {
eventProductList << evtProduct.getProductId();
}
ui->leEventProduct->setText(eventProductList.join(";"));
Display catalogues and events with CatalogueAPI
r1129
QString tagList;
Edition of tags
r1153 auto tags = event->getTagsNames();
Display catalogues and events with CatalogueAPI
r1129 for (auto tag : tags) {
Edition of tags
r1153 tagList += tag;
Display catalogues and events with CatalogueAPI
r1129 tagList += ' ';
}
Edition of event products via the inspector
r1150 ui->leEventTags->setEnabled(true);
Display catalogues and events with CatalogueAPI
r1129 ui->leEventTags->setText(tagList);
Edition of event products via the inspector
r1150 ui->dateTimeEventTStart->setEnabled(false);
ui->dateTimeEventTEnd->setEnabled(false);
Displays TStart & TEnd for events
r1152 ui->dateTimeEventTStart->setDateTime(DateUtils::dateTime(event->getTStart()));
ui->dateTimeEventTEnd->setDateTime(DateUtils::dateTime(event->getTEnd()));
Edition of catalogues from the inspector
r1147
blockSignals(false);
Skeleton to fill the inspector with the selection
r1105 }
Edition of event products via the inspector
r1150 void CatalogueInspectorWidget::setEventProduct(const std::shared_ptr<DBEvent> &event,
const std::shared_ptr<DBEventProduct> &eventProduct)
{
Add init of DisplayedEvent. Add save on EventProduct modif
r1226
impl->m_DisplayedEvent = event;
Edition of event products via the inspector
r1150 impl->m_DisplayedEventProduct = eventProduct;
blockSignals(true);
showPage(Page::EventProperties);
ui->leEventName->setEnabled(false);
ui->leEventName->setText(event->getName());
small gui improvements
r1238 ui->leEventProduct->setEnabled(false);
Edition of event products via the inspector
r1150 ui->leEventProduct->setText(eventProduct->getProductId());
ui->leEventTags->setEnabled(false);
ui->leEventTags->clear();
ui->dateTimeEventTStart->setEnabled(true);
ui->dateTimeEventTEnd->setEnabled(true);
ui->dateTimeEventTStart->setDateTime(DateUtils::dateTime(eventProduct->getTStart()));
ui->dateTimeEventTEnd->setDateTime(DateUtils::dateTime(eventProduct->getTEnd()));
blockSignals(false);
}
Adaptation to the shared pointers of catalogue controller
r1143 void CatalogueInspectorWidget::setCatalogue(const std::shared_ptr<DBCatalogue> &catalogue)
Skeleton to fill the inspector with the selection
r1105 {
Edition of catalogues from the inspector
r1147 impl->m_DisplayedCatalogue = catalogue;
blockSignals(true);
Skeleton to fill the inspector with the selection
r1105 showPage(Page::CatalogueProperties);
Adaptation to the shared pointers of catalogue controller
r1143 ui->leCatalogueName->setText(catalogue->getName());
ui->leCatalogueAuthor->setText(catalogue->getAuthor());
Edition of catalogues from the inspector
r1147
blockSignals(false);
Skeleton to fill the inspector with the selection
r1105 }
Link between selection zone item and event
r1293
void CatalogueInspectorWidget::refresh()
{
switch (static_cast<Page>(ui->stackedWidget->currentIndex())) {
case Page::CatalogueProperties:
setCatalogue(impl->m_DisplayedCatalogue);
break;
case Page::EventProperties: {
auto isEventShowed = ui->leEventName->isEnabled();
setEvent(impl->m_DisplayedEvent);
if (!isEventShowed && impl->m_DisplayedEvent) {
setEventProduct(impl->m_DisplayedEvent, impl->m_DisplayedEventProduct);
}
}
}
}