From 322a116af693907cd883b69b588fa3bcbe8f59e3 Mon Sep 17 00:00:00 2001 From: Bryan Biedenkapp Date: Wed, 2 Oct 2024 18:00:10 -0400 Subject: [PATCH] implement default file backup before saving; fix copyright dates; --- src/tged/CloseWndBase.h | 2 +- src/tged/Defines.h | 2 +- src/tged/TGEdApplication.h | 2 +- src/tged/TGEdMainWnd.h | 37 +++++++++++++++++++++++++++++++++--- src/tged/TGEditPeerListWnd.h | 2 +- src/tged/TGEditWnd.h | 2 +- src/tged/TGListWnd.h | 2 +- 7 files changed, 40 insertions(+), 9 deletions(-) diff --git a/src/tged/CloseWndBase.h b/src/tged/CloseWndBase.h index 6a44bde5..908443e8 100644 --- a/src/tged/CloseWndBase.h +++ b/src/tged/CloseWndBase.h @@ -4,7 +4,7 @@ * GPLv2 Open Source. Use is subject to license terms. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright (C) 2023 Bryan Biedenkapp, N2PLL + * Copyright (C) 2023,2024 Bryan Biedenkapp, N2PLL * */ /** diff --git a/src/tged/Defines.h b/src/tged/Defines.h index 100660ea..cc780a48 100644 --- a/src/tged/Defines.h +++ b/src/tged/Defines.h @@ -4,7 +4,7 @@ * GPLv2 Open Source. Use is subject to license terms. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright (C) 2023 Bryan Biedenkapp, N2PLL + * Copyright (C) 2023,2024 Bryan Biedenkapp, N2PLL * */ /** diff --git a/src/tged/TGEdApplication.h b/src/tged/TGEdApplication.h index d938f58f..7ccb0382 100644 --- a/src/tged/TGEdApplication.h +++ b/src/tged/TGEdApplication.h @@ -4,7 +4,7 @@ * GPLv2 Open Source. Use is subject to license terms. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright (C) 2023 Bryan Biedenkapp, N2PLL + * Copyright (C) 2023,2024 Bryan Biedenkapp, N2PLL * */ /** diff --git a/src/tged/TGEdMainWnd.h b/src/tged/TGEdMainWnd.h index cc70c736..8c9f5967 100644 --- a/src/tged/TGEdMainWnd.h +++ b/src/tged/TGEdMainWnd.h @@ -4,7 +4,7 @@ * GPLv2 Open Source. Use is subject to license terms. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright (C) 2023 Bryan Biedenkapp, N2PLL + * Copyright (C) 2024 Bryan Biedenkapp, N2PLL * */ /** @@ -66,13 +66,15 @@ public: // file menu m_fileMenuSeparator1.setSeparator(); m_saveSettingsItem.addAccelerator(FKey::Meta_s); // Meta/Alt + S - m_saveSettingsItem.addCallback("clicked", this, [&]() { g_tidLookups->commit(); }); - m_keyF2.addCallback("activate", this, [&]() { g_tidLookups->commit(); }); + m_saveSettingsItem.addCallback("clicked", this, [&]() { save(); }); + m_keyF2.addCallback("activate", this, [&]() { save(); }); m_quitItem.addAccelerator(FKey::Meta_x); // Meta/Alt + X m_quitItem.addCallback("clicked", getFApplication(), &FApplication::cb_exitApp, this); m_keyF3.addCallback("activate", getFApplication(), &FApplication::cb_exitApp, this); m_keyF5.addCallback("activate", this, [&]() { g_tidLookups->reload(); m_wnd->loadListView(); }); + m_backupOnSave.setChecked(); + // help menu m_aboutItem.addCallback("clicked", this, [&]() { const FString line(2, UniChar::BoxDrawingsHorizontal); @@ -98,6 +100,7 @@ private: FMenu m_fileMenu{"&File", &m_menuBar}; FMenuItem m_saveSettingsItem{"&Save", &m_fileMenu}; FCheckMenuItem m_saveOnCloseToggle{"Save on Close?", &m_fileMenu}; + FCheckMenuItem m_backupOnSave{"Backup Rules File?", &m_fileMenu}; FMenuItem m_fileMenuSeparator1{&m_fileMenu}; FMenuItem m_quitItem{"&Quit", &m_fileMenu}; @@ -109,6 +112,34 @@ private: FStatusKey m_keyF3{FKey::F3, "Quit", &m_statusBar}; FStatusKey m_keyF5{FKey::F5, "Reload", &m_statusBar}; + /** + * @brief + */ + void save() + { + if (m_backupOnSave.isChecked()) { + std::string bakFile = g_iniFile + ".bak"; + LogMessage(LOG_HOST, "Backing up existing file %s to %s", g_iniFile.c_str(), bakFile.c_str()); + copyFile(g_iniFile.c_str(), bakFile.c_str()); + } + + g_tidLookups->commit(); + } + + /** + * @brief Helper to copy one file to another. + * @param src Source file. + * @param dest Destination File. + * @returns bool True, if file copied, otherwise false. + */ + bool copyFile(const char *srcFilePath, const char* destFilePath) + { + std::ifstream src(srcFilePath, std::ios::binary); + std::ofstream dest(destFilePath, std::ios::binary); + dest << src.rdbuf(); + return src && dest; + } + /* ** Event Handlers */ diff --git a/src/tged/TGEditPeerListWnd.h b/src/tged/TGEditPeerListWnd.h index 704cb58b..b7d984d1 100644 --- a/src/tged/TGEditPeerListWnd.h +++ b/src/tged/TGEditPeerListWnd.h @@ -4,7 +4,7 @@ * GPLv2 Open Source. Use is subject to license terms. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright (C) 2023 Bryan Biedenkapp, N2PLL + * Copyright (C) 2024 Bryan Biedenkapp, N2PLL * */ /** diff --git a/src/tged/TGEditWnd.h b/src/tged/TGEditWnd.h index 7223482e..ea021217 100644 --- a/src/tged/TGEditWnd.h +++ b/src/tged/TGEditWnd.h @@ -4,7 +4,7 @@ * GPLv2 Open Source. Use is subject to license terms. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright (C) 2023 Bryan Biedenkapp, N2PLL + * Copyright (C) 2024 Bryan Biedenkapp, N2PLL * */ /** diff --git a/src/tged/TGListWnd.h b/src/tged/TGListWnd.h index d544682b..d7309bcd 100644 --- a/src/tged/TGListWnd.h +++ b/src/tged/TGListWnd.h @@ -4,7 +4,7 @@ * GPLv2 Open Source. Use is subject to license terms. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright (C) 2023 Bryan Biedenkapp, N2PLL + * Copyright (C) 2024 Bryan Biedenkapp, N2PLL * */ /**