-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathselllistwidget.cpp
More file actions
78 lines (65 loc) · 2.9 KB
/
selllistwidget.cpp
File metadata and controls
78 lines (65 loc) · 2.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include "selllistwidget.h"
#include "database.h"
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QPushButton>
#include <QHeaderView>
SellListWidget::SellListWidget(QWidget* parent) : QWidget(parent) {
auto* layout = new QVBoxLayout(this);
auto* top = new QHBoxLayout;
top->addWidget(new QLabel("<b>Items I can sell</b>"));
top->addStretch();
m_lbl_count = new QLabel;
top->addWidget(m_lbl_count);
auto* btn_refresh = new QPushButton("Refresh");
top->addWidget(btn_refresh);
layout->addLayout(top);
m_table = new QTableWidget(0, 5);
m_table->setHorizontalHeaderLabels({"Item", "Technique", "Production Price", "Market Price", "Difference"});
m_table->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch);
m_table->horizontalHeader()->setSectionResizeMode(1, QHeaderView::Stretch);
m_table->setEditTriggers(QAbstractItemView::NoEditTriggers);
m_table->setAlternatingRowColors(true);
m_table->setSortingEnabled(true);
layout->addWidget(m_table, 1);
connect(btn_refresh, &QPushButton::clicked, this, &SellListWidget::refresh);
refresh();
}
void SellListWidget::refresh() {
m_table->setSortingEnabled(false);
m_table->setRowCount(0);
const auto items = Database::instance().getSellableItems();
for (const auto& si : items) {
int row = m_table->rowCount();
m_table->insertRow(row);
m_table->setItem(row, 0, new QTableWidgetItem(si.item_name));
m_table->setItem(row, 1, new QTableWidgetItem(si.technique_name));
auto* own_item = new QTableWidgetItem;
own_item->setData(Qt::DisplayRole, QString::number(si.own_price, 'f', 4));
own_item->setData(Qt::UserRole, si.own_price);
m_table->setItem(row, 2, own_item);
auto* mkt_item = new QTableWidgetItem;
if (si.market_price >= 0) {
mkt_item->setData(Qt::DisplayRole, QString::number(si.market_price, 'f', 4));
mkt_item->setData(Qt::UserRole, si.market_price);
} else {
mkt_item->setText("—");
}
m_table->setItem(row, 3, mkt_item);
auto* diff_item = new QTableWidgetItem;
if (si.market_price > 0) {
double diff_pct = ((si.own_price - si.market_price) / si.market_price) * 100.0;
diff_item->setData(Qt::DisplayRole, QString("%1%").arg(diff_pct, 0, 'f', 1));
diff_item->setData(Qt::UserRole, diff_pct);
if (diff_pct < 0)
diff_item->setForeground(QColor(0, 150, 0)); // green: production cheaper than market (good margin)
else if (diff_pct > 0)
diff_item->setForeground(QColor(200, 0, 0)); // red: production more expensive than market
} else {
diff_item->setText("—");
}
m_table->setItem(row, 4, diff_item);
}
m_table->setSortingEnabled(true);
m_lbl_count->setText(QString("%1 item(s)").arg(items.size()));
}