From: Shane Jaroch Date: Wed, 21 Jan 2026 11:16:15 +0000 (-0500) Subject: wip X-Git-Url: https://git.nutra.tk/v2?a=commitdiff_plain;h=0a53c7a8621297f2a00536115027762c049fd73c;p=nutratech%2Fgui.git wip --- diff --git a/include/widgets/searchwidget.h b/include/widgets/searchwidget.h index 7c95bb3..03d929e 100644 --- a/include/widgets/searchwidget.h +++ b/include/widgets/searchwidget.h @@ -16,10 +16,12 @@ public: signals: void foodSelected(int foodId, const QString &foodName); + void addToMealRequested(int foodId, const QString &foodName, double grams); private slots: void performSearch(); void onRowDoubleClicked(int row, int column); + void onCustomContextMenu(const QPoint &pos); private: QLineEdit *searchInput; diff --git a/src/main.cpp b/src/main.cpp index 3e33a54..27bfce4 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -54,7 +54,7 @@ int main(int argc, char *argv[]) { if (resBtn == QMessageBox::Yes) { dbPath = QFileDialog::getOpenFileName( - nullptr, "Find usda.sqlite3", QDir::homePath(), + nullptr, "Find usda.sqlite3", QDir::homePath() + "/.nutra", "SQLite Databases (*.sqlite3 *.db)"); } diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index facd93f..869fab5 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -71,6 +71,12 @@ void MainWindow::setupUi() { 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"); @@ -90,7 +96,8 @@ void MainWindow::setupUi() { 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)) { diff --git a/src/widgets/searchwidget.cpp b/src/widgets/searchwidget.cpp index a035191..29f7aa5 100644 --- a/src/widgets/searchwidget.cpp +++ b/src/widgets/searchwidget.cpp @@ -1,6 +1,9 @@ #include "widgets/searchwidget.h" +#include #include #include +#include +#include #include #include @@ -41,8 +44,12 @@ SearchWidget::SearchWidget(QWidget *parent) : QWidget(parent) { 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); } @@ -83,3 +90,37 @@ void SearchWidget::onRowDoubleClicked(int row, int column) { 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); + } + } +}