]> Nutra Git (v1) - nutratech/gui.git/commitdiff
wip
authorShane Jaroch <chown_tee@proton.me>
Wed, 21 Jan 2026 11:16:15 +0000 (06:16 -0500)
committerShane Jaroch <chown_tee@proton.me>
Wed, 21 Jan 2026 11:16:15 +0000 (06:16 -0500)
include/widgets/searchwidget.h
src/main.cpp
src/mainwindow.cpp
src/widgets/searchwidget.cpp

index 7c95bb3f46f9855eeb06aba923fcee0caaad6a0d..03d929e35623b7fabadb493dd8f20fd243fa8587 100644 (file)
@@ -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;
index 3e33a545b3be7692d05275d3738b27b214b60f4e..27bfce43f40466b8353a7ce208580434eca3940f 100644 (file)
@@ -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)");
     }
 
index facd93feec05e5cf1e3cf87a7106f7ca671415d4..869fab5350085803958d4aaa21a9506bbca8c934 100644 (file)
@@ -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)) {
index a0351913d4a6eede9de037216a7678b0ac3bec34..29f7aa5c9608bf3498c16e86bf295eff1ab83ce8 100644 (file)
@@ -1,6 +1,9 @@
 #include "widgets/searchwidget.h"
+#include <QAction>
 #include <QHBoxLayout>
 #include <QHeaderView>
+#include <QInputDialog>
+#include <QMenu>
 #include <QMessageBox>
 #include <QVBoxLayout>
 
@@ -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);
+    }
+  }
+}