diff options
| -rw-r--r-- | cashflow.cpp | 39 | ||||
| -rw-r--r-- | cashflow.h | 2 | ||||
| -rw-r--r-- | main.cpp | 6 |
3 files changed, 31 insertions, 16 deletions
diff --git a/cashflow.cpp b/cashflow.cpp index f4f6e70..6df01a9 100644 --- a/cashflow.cpp +++ b/cashflow.cpp @@ -18,7 +18,7 @@ #include <QSignalBlocker> #include <limits> -CashFlow::CashFlow(QWidget *parent) +CashFlow::CashFlow(QWidget *parent, const QString &filePath) : QMainWindow(parent) , ui(new Ui::CashFlow) , currentTransactionId(-1) @@ -34,10 +34,15 @@ CashFlow::CashFlow(QWidget *parent) // Initialize database database = new Database(); - // Try to open default database - QString defaultDir = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation); - QDir().mkpath(defaultDir); - QString defaultPath = defaultDir + "/default.cashflo.sqlite"; + // Determine which database to open + QString dbPath; + if (!filePath.isEmpty()) { + dbPath = filePath; + } else { + QString defaultDir = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation); + QDir().mkpath(defaultDir); + dbPath = defaultDir + "/default.cashflo.sqlite"; + } setupConnections(); @@ -61,14 +66,14 @@ CashFlow::CashFlow(QWidget *parent) ui->chartDateFromEdit->setDate(QDate::currentDate().addMonths(-1)); ui->chartDateToEdit->setDate(QDate::currentDate().addMonths(3)); - if (!openDatabase(defaultPath)) { - QMessageBox::critical(this, "Database Error", "Failed to open default database: " + database->lastError()); + if (!openDatabase(dbPath)) { + QMessageBox::critical(this, "Database Error", "Failed to open database: " + database->lastError()); return; } // Regenerate all projections on startup to ensure they're current database->regenerateAllProjections(); - refreshView(); // Refresh to show new projection IDs + // No need to call refreshView here - onJumpToToday already does it } CashFlow::~CashFlow() @@ -733,7 +738,7 @@ void CashFlow::insertPeriodEndRow(const QString &label, double balance, const QM dateItem->setBackground(QColor(180, 180, 180)); dateItem->setForeground(Qt::black); dateItem->setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter); - dateItem->setFlags(dateItem->flags() & ~Qt::ItemIsSelectable); + dateItem->setFlags(dateItem->flags() & ~Qt::ItemIsEditable); dateItem->setData(Qt::UserRole, -1); // Mark as period end row dateItem->setData(Qt::UserRole + 1, periodId); // Store period ID ui->transactionTable->setItem(row, 0, dateItem); @@ -741,13 +746,19 @@ void CashFlow::insertPeriodEndRow(const QString &label, double balance, const QM // Span the Date cell across Date and Amount columns (columns 0 and 1) ui->transactionTable->setSpan(row, 0, 1, 2); + // Column 1 (Amount) is hidden by the span, but set it to empty to avoid copy issues + QTableWidgetItem *hiddenAmountItem = new QTableWidgetItem(""); + hiddenAmountItem->setBackground(QColor(180, 180, 180)); + hiddenAmountItem->setFlags(hiddenAmountItem->flags() & ~Qt::ItemIsEditable); + ui->transactionTable->setItem(row, 1, hiddenAmountItem); + // Balance column: grand total QTableWidgetItem *balanceItem = new QTableWidgetItem(QString("$%1").arg(formatCurrency(balance))); balanceItem->setFont(QFont("Arial", 11, QFont::Bold)); balanceItem->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter); balanceItem->setBackground(QColor(180, 180, 180)); balanceItem->setForeground(balance < 0 ? QColor(200, 0, 0) : QColor(0, 100, 0)); - balanceItem->setFlags(balanceItem->flags() & ~Qt::ItemIsSelectable); + balanceItem->setFlags(balanceItem->flags() & ~Qt::ItemIsEditable); ui->transactionTable->setItem(row, 2, balanceItem); // Per-account columns @@ -759,7 +770,7 @@ void CashFlow::insertPeriodEndRow(const QString &label, double balance, const QM // Amount column: empty QTableWidgetItem *acctAmtItem = new QTableWidgetItem(""); acctAmtItem->setBackground(QColor(180, 180, 180)); - acctAmtItem->setFlags(acctAmtItem->flags() & ~Qt::ItemIsSelectable); + acctAmtItem->setFlags(acctAmtItem->flags() & ~Qt::ItemIsEditable); ui->transactionTable->setItem(row, amountCol, acctAmtItem); // Balance column: account balance @@ -769,7 +780,7 @@ void CashFlow::insertPeriodEndRow(const QString &label, double balance, const QM acctBalItem->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter); acctBalItem->setBackground(QColor(180, 180, 180)); acctBalItem->setForeground(acctBalance < 0 ? QColor(200, 0, 0) : QColor(0, 100, 0)); - acctBalItem->setFlags(acctBalItem->flags() & ~Qt::ItemIsSelectable); + acctBalItem->setFlags(acctBalItem->flags() & ~Qt::ItemIsEditable); ui->transactionTable->setItem(row, balanceCol, acctBalItem); } } @@ -779,7 +790,7 @@ void CashFlow::insertPeriodEndRow(const QString &label, double balance, const QM for (int col = accountCol; col < totalColumns; col++) { QTableWidgetItem *emptyItem = new QTableWidgetItem(""); emptyItem->setBackground(QColor(180, 180, 180)); - emptyItem->setFlags(emptyItem->flags() & ~Qt::ItemIsSelectable); + emptyItem->setFlags(emptyItem->flags() & ~Qt::ItemIsEditable); ui->transactionTable->setItem(row, col, emptyItem); } @@ -1830,7 +1841,7 @@ bool CashFlow::openDatabase(const QString &filePath) { clearTransactionEntry(); clearRecurringEntry(); - refreshView(); + onJumpToToday(); return true; } @@ -21,7 +21,7 @@ class CashFlow : public QMainWindow Q_OBJECT public: - CashFlow(QWidget *parent = nullptr); + CashFlow(QWidget *parent = nullptr, const QString &filePath = QString()); ~CashFlow(); protected: @@ -5,7 +5,11 @@ int main(int argc, char *argv[]) { QApplication a(argc, argv); - CashFlow w; + QString filePath; + if (argc > 1) { + filePath = QString::fromLocal8Bit(argv[1]); + } + CashFlow w(nullptr, filePath); w.show(); return a.exec(); } |
