aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cashflow.cpp39
-rw-r--r--cashflow.h2
-rw-r--r--main.cpp6
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;
}
diff --git a/cashflow.h b/cashflow.h
index c5b92c6..cdf9a84 100644
--- a/cashflow.h
+++ b/cashflow.h
@@ -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:
diff --git a/main.cpp b/main.cpp
index 9553f70..570d08f 100644
--- a/main.cpp
+++ b/main.cpp
@@ -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();
}