int main(int argc, char* argv[]) {
QApplication app(argc, argv);
- QApplication::setApplicationName("Nutra");
- QApplication::setOrganizationName("NutraTech");
+ QApplication::setOrganizationName("nutra");
+ QApplication::setApplicationName("nutra");
QApplication::setWindowIcon(QIcon(":/resources/nutrition_icon-no_bg.png"));
// Prevent multiple instances
// For now, simpler handling:
detailsWidget->loadFood(foodId, foodName);
tabs->setCurrentWidget(detailsWidget);
+
+ // Persist selection
+ QSettings settings("nutra", "nutra");
+ settings.setValue("lastSelectedFoodId", foodId);
+ settings.setValue("lastSelectedFoodName", foodName);
});
connect(searchWidget, &SearchWidget::addToMealRequested, this,
dbStatusLabel->setFrameStyle(QFrame::Panel | QFrame::Sunken);
statusBar()->addPermanentWidget(dbStatusLabel);
updateStatusBar();
+
+ // Restore last selection if available
+ QSettings settings("nutra", "nutra");
+ if (settings.contains("lastSelectedFoodId") && settings.contains("lastSelectedFoodName")) {
+ int id = settings.value("lastSelectedFoodId").toInt();
+ QString name = settings.value("lastSelectedFoodName").toString();
+ // Defer slightly to ensure DB is ready if needed (though it should be open by now)
+ QTimer::singleShot(200, this, [this, id, name]() {
+ detailsWidget->loadFood(id, name);
+ // Optionally switch tab? Default is usually search or dashboard.
+ // Let's keep the user's focus where it makes sense.
+ // If they had a selection open, maybe they want to see it.
+ // tabs->setCurrentWidget(detailsWidget);
+ });
+ }
}
void MainWindow::updateStatusBar() {
}
void MainWindow::updateRecentFileActions() {
- QSettings settings("NutraTech", "Nutra");
+ QSettings settings("nutra", "nutra");
// Check for legacy setting if new one is empty
if (!settings.contains("recentFilesList") && settings.contains("recentFiles")) {
auto info = DatabaseManager::instance().getDatabaseInfo(path);
if (!info.isValid) return;
- QSettings settings("NutraTech", "Nutra");
+ QSettings settings("nutra", "nutra");
// Read list of QVariantMaps
QList<QVariant> files = settings.value("recentFilesList").toList();
}
void PreferencesDialog::loadGeneralSettings() {
- QSettings settings("NutraTech", "Nutra");
+ QSettings settings("nutra", "nutra");
debounceSpin->setValue(settings.value("searchDebounce", 600).toInt());
}
void PreferencesDialog::save() {
// Save General
- QSettings settings("NutraTech", "Nutra");
+ QSettings settings("nutra", "nutra");
settings.setValue("searchDebounce", debounceSpin->value());
// Save Profile
// Save query to history
addToHistory(0, query);
+ // Organization and application name - saves to ~/.config/nutra/nutra.conf
+ QSettings settings("nutra", "nutra");
+
+ // Save persistence
+ settings.setValue("lastSearchQuery", query);
+
QElapsedTimer timer;
timer.start();
}
void SearchWidget::loadHistory() {
- QSettings settings("NutraTech", "Nutra");
+ QSettings settings("nutra", "nutra");
QList<QVariant> list = settings.value("recentFoods").toList();
recentHistory.clear();
for (const auto& v : list) {
}
void SearchWidget::reloadSettings() {
- QSettings settings("NutraTech", "Nutra");
+ QSettings settings("nutra", "nutra");
int debounce = settings.value("searchDebounce", 600).toInt();
debounce = std::max(debounce, 250);
searchTimer->setInterval(debounce);
+
+ // Restore last search if empty
+ if (searchInput->text().isEmpty() && settings.contains("lastSearchQuery")) {
+ QString lastQuery = settings.value("lastSearchQuery").toString();
+ searchInput->setText(lastQuery);
+ // Defer search slightly to allow UI unchecked init
+ QTimer::singleShot(100, this, &SearchWidget::performSearch);
+ }
}
bool SearchWidget::eventFilter(QObject* obj, QEvent* event) {