if (resBtn == QMessageBox::Yes) {
dbPath = QFileDialog::getOpenFileName(
- nullptr, "Find usda.sqlite3", QDir::homePath(),
+ nullptr, "Find usda.sqlite3", QDir::homePath() + "/.nutra",
"SQLite Databases (*.sqlite3 *.db)");
}
tabs->setCurrentWidget(detailsWidget);
});
+ connect(searchWidget, &SearchWidget::addToMealRequested, this,
+ [=](int foodId, const QString &foodName, double grams) {
+ mealWidget->addFood(foodId, foodName, grams);
+ tabs->setCurrentWidget(mealWidget);
+ });
+
// Analysis Tab
detailsWidget = new DetailsWidget(this);
tabs->addTab(detailsWidget, "Analyze");
void MainWindow::onOpenDatabase() {
QString fileName = QFileDialog::getOpenFileName(
- this, "Open USDA Database", "", "SQLite Databases (*.sqlite3 *.db)");
+ this, "Open USDA Database", QDir::homePath() + "/.nutra",
+ "SQLite Databases (*.sqlite3 *.db)");
if (!fileName.isEmpty()) {
if (DatabaseManager::instance().connect(fileName)) {
#include "widgets/searchwidget.h"
+#include <QAction>
#include <QHBoxLayout>
#include <QHeaderView>
+#include <QInputDialog>
+#include <QMenu>
#include <QMessageBox>
#include <QVBoxLayout>
resultsTable->setSelectionBehavior(QAbstractItemView::SelectRows);
resultsTable->setSelectionMode(QAbstractItemView::SingleSelection);
resultsTable->setEditTriggers(QAbstractItemView::NoEditTriggers);
+ resultsTable->setContextMenuPolicy(Qt::CustomContextMenu);
+
connect(resultsTable, &QTableWidget::cellDoubleClicked, this,
&SearchWidget::onRowDoubleClicked);
+ connect(resultsTable, &QTableWidget::customContextMenuRequested, this,
+ &SearchWidget::onCustomContextMenu);
layout->addWidget(resultsTable);
}
emit foodSelected(idItem->text().toInt(), descItem->text());
}
}
+
+void SearchWidget::onCustomContextMenu(const QPoint &pos) {
+ QTableWidgetItem *item = resultsTable->itemAt(pos);
+ if (item == nullptr)
+ return;
+
+ int row = item->row();
+ QTableWidgetItem *idItem = resultsTable->item(row, 0);
+ QTableWidgetItem *descItem = resultsTable->item(row, 1);
+
+ if (idItem == nullptr || descItem == nullptr)
+ return;
+
+ int foodId = idItem->text().toInt();
+ QString foodName = descItem->text();
+
+ QMenu menu(this);
+ QAction *analyzeAction = menu.addAction("Analyze");
+ QAction *addToMealAction = menu.addAction("Add to Meal");
+
+ QAction *selectedAction =
+ menu.exec(resultsTable->viewport()->mapToGlobal(pos));
+
+ if (selectedAction == analyzeAction) {
+ emit foodSelected(foodId, foodName);
+ } else if (selectedAction == addToMealAction) {
+ bool ok;
+ double grams = QInputDialog::getDouble(
+ this, "Add to Meal", "Amount (grams):", 100.0, 0.1, 10000.0, 1, &ok);
+ if (ok) {
+ emit addToMealRequested(foodId, foodName, grams);
+ }
+ }
+}