-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmainwindow.cpp
147 lines (117 loc) · 4.18 KB
/
mainwindow.cpp
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#include "mainwindow.h"
#include "ui_mainwindow.h"
/* Internal libraries */
#include <QMessageBox>
/* Libraries */
#include "tools/json/json.h"
/* Windows */
#include "addstockwindow.h"
#include "listwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
// Set the width
ui->stockListTableWidget->clear();
ui->stockListTableWidget->setColumnCount(2);
ui->stockListTableWidget->setHorizontalHeaderLabels({"Stock name", "Index name"});
// Load stock list
Json json;
QJsonObject object = json.loadObject(STOCK_LIST);
if(!object.isEmpty()){
// Get two arrays
QJsonArray stockNames = object.value(STOCK_NAMES).toArray();
QJsonArray stockIndexNames = object.value(STOCK_INDEX_NAMES).toArray();
// Fill the table
int numberOfListedStocks = stockNames.size();
ui->stockListTableWidget->setRowCount(numberOfListedStocks);
for(int i = 0; i < numberOfListedStocks; i++){
ui->stockListTableWidget->setItem(i, 0, new QTableWidgetItem(stockNames.at(i).toString()));
ui->stockListTableWidget->setItem(i, 1, new QTableWidgetItem(stockIndexNames.at(i).toString()));
}
}
// Set date
ui->toDateEdit->setMaximumDate(QDate::currentDate());
ui->toDateEdit->setDate(QDate::currentDate());
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::closeEvent (QCloseEvent *event){
Q_UNUSED(event)
// Save to JSON
int rows = ui->stockListTableWidget->rowCount();
Json json;
QJsonArray stockNames;
QJsonArray stockIndexNames;
for(int i = 0; i < rows; i++){
stockNames.append(ui->stockListTableWidget->item(i, 0)->text());
stockIndexNames.append(ui->stockListTableWidget->item(i, 1)->text());
}
// Create object and save
QJsonObject object;
object[STOCK_NAMES] = stockNames;
object[STOCK_INDEX_NAMES] = stockIndexNames;
json.saveObject(object, STOCK_LIST);
}
void MainWindow::on_addStockPushButton_clicked()
{
AddStockWindow *addStockWindow = new AddStockWindow(nullptr, ui->stockListTableWidget);
addStockWindow->show();
}
void MainWindow::on_editStockPushButton_clicked()
{
if(ui->stockListTableWidget->selectionModel()->selectedRows().size() == 0){
QMessageBox::warning(this, "Stocks", "No stock selected");
return;
}
AddStockWindow *addStockWindow = new AddStockWindow(nullptr, ui->stockListTableWidget, true);
addStockWindow->show();
}
void MainWindow::on_deleteStockPushButton_clicked()
{
if(ui->stockListTableWidget->selectionModel()->selectedRows().size() == 0){
QMessageBox::warning(this, "Stocks", "No stock selected");
return;
}
// Ask
int row = ui->stockListTableWidget->currentRow();
QString stockName = ui->stockListTableWidget->item(row, 0)->text();
int status = QMessageBox::question(this, "Remove stock", "Do you want to remove " + stockName + "?");
if(status == QMessageBox::Yes){
ui->stockListTableWidget->removeRow(row);
}
}
void MainWindow::on_fromDateEdit_userDateChanged(const QDate &date)
{
if(date > ui->toDateEdit->date()){
ui->fromDateEdit->setDate(ui->toDateEdit->date());
}
if(date > QDate::currentDate()){
ui->fromDateEdit->setDate(QDate::currentDate());
}
}
void MainWindow::on_toDateEdit_userDateChanged(const QDate &date)
{
if(date < ui->fromDateEdit->date()){
ui->toDateEdit->setDate(ui->fromDateEdit->date());
}
if(date > QDate::currentDate()){
ui->toDateEdit->setDate(QDate::currentDate());
}
}
void MainWindow::on_analyseStockPushButton_clicked()
{
if(ui->stockListTableWidget->rowCount() == 0){
QMessageBox::warning(this, "Stocks", "No stock added");
return;
}
// Dates in unix time
qint64 fromDate = ui->fromDateEdit->dateTime().toSecsSinceEpoch();
qint64 toDate = ui->toDateEdit->dateTime().toSecsSinceEpoch() + 82800; // 82800 is 24 hours. Important to get the latest day at Yahoo Finance
// Show list of average of each index
ListWindow *listWindow = new ListWindow(nullptr, ui->stockListTableWidget, fromDate, toDate);
listWindow->show();
}