Personal Finance 1.0.0
An application that allows you to track/store/view finances, as well as calculate different financial values.
MainWindow.h
Go to the documentation of this file.
1/*
2* Author: Dawson Dauphinais
3* ddauphin@nmu.edu
4*
5* Northern Michigan Univeristy
6*
7* Date Last Modified: 11/30/2021
8*
9* This file contains the defintions for the main functionality of the application.
10*
11* -------------------------------------------------------------------------------------
12* This application contains software from:
13*
14* Title: "JSON for Modern C++"
15* Author: Lohmann, Niels
16* -orchid: https://orcid.org/0000-0001-9037-795X
17* -email: mail@nlohmann.me
18* -website: https://nlohmann.me
19*
20* Version: 3.10.4
21* License: MIT
22* Repository-Code: "https://github.com/nlohmann"
23* URL: https://json.nlohmann.me
24**/
25
26#ifndef PERSONALFINANCE_MAINWINDOW_H
27#define PERSONALFINANCE_MAINWINDOW_H
28
29#include <wx/wxprec.h>
30
31#ifndef WX_PRECOMP
32
33#include <wx/wx.h>
34
35#endif
36
37#include <map>
38#include <iomanip>
39#include <fstream>
40#include <string>
41#include "../include/Account.h"
42#include "../include/formulas.h"
43#include <wx/button.h>
44#include <wx/listctrl.h>
45#include <wx/stattext.h>
46#include <wx/panel.h>
47#include <wx/grid.h>
48#include <wx/wfstream.h>
49#include <wx/filedlg.h>
50#include <wx/filepicker.h>
51#include <nlohmann/json.hpp>
52
53#undef TestFrm_STYLE
54#define TestFrm_STYLE wxCAPTION | wxSYSTEM_MENU | wxMINIMIZE_BOX | wxCLOSE_BOX
55
60class MainWindow : public wxFrame
61{
62
63private:
64 DECLARE_EVENT_TABLE();
65
66public:
68
73 MainWindow(wxWindow *parent,
74 wxWindowID id,
75 const wxString &title,
76 const wxPoint &pos = wxDefaultPosition,
77 const wxSize &size = wxDefaultSize,
78 long style = wxDEFAULT_FRAME_STYLE,
79 const wxString &name = wxFrameNameStr);
80
85 void setPathName(wxString path);
86
90 wxString getPathName();
91
96 void OnViewAccountClick(wxCommandEvent &event);
97
102 void OnAccountSelected(wxCommandEvent &event);
103
108 void OnQuit(wxCommandEvent &event);
109
114 void OnNewFile(wxCommandEvent &event);
115
120 void OnOpenFile(wxCommandEvent &event);
121
126 void OnSaveFile(wxCommandEvent &event);
127
132 void OnSaveFileAs(wxCommandEvent &event);
133
138 void ExitButtonClick(wxCommandEvent &event);
139
144 void EnterButtonClick(wxCommandEvent &event);
145
150 void UseExistingAcctClick(wxCommandEvent &event);
151
156 void CreateNewSaveDataClick(wxCommandEvent &event);
157
163 void OnAccInfoSubmit(wxCommandEvent &event);
164
169 void OnGoToAccHome(wxCommandEvent &event);
170
176 void OnUpdateAccClick(wxCommandEvent &event);
177
182 void OnUpdateName(wxCommandEvent &event);
183
188 void OnUpdateBalance(wxCommandEvent &event);
189
194 void OnUpdateTransactions(wxCommandEvent &event);
195
201 void OnCreateNewAccount(wxCommandEvent &event);
202
208 void OnSwitchAccount(wxCommandEvent &event);
209
210 void OnToolsBtnClick(wxCommandEvent &event);
211
212 void OnLoanCalculatorClick(wxCommandEvent &event);
213
214 void OnCreditCardClick(wxCommandEvent &event);
215
216 void OnDoubleInvestmentClick(wxCommandEvent &event);
217
218 void OnLeverageRatioClick(wxCommandEvent &event);
219
220 void OnAverageGrowthClick(wxCommandEvent &event);
221
222 void OnNowOrLater(wxCommandEvent &event);
223
224 void OnViewCashFlow(wxCommandEvent &event);
225
226 void OnAddIncome(wxCommandEvent &event);
227
228 void OnHomeFromViewPanel(wxCommandEvent &event);
229
230 virtual ~MainWindow();
231
232private:
233 std::map<string, Account> accountMap;
234 wxString pathName;
235
236 wxPanel *LoadOptionsPanel;
237 wxButton *ExitButton;
238 wxButton *EnterButton;
239 wxStaticText *TitleText2;
240
241 wxButton *NextPageButtonExistingAcc;
242
243 wxStaticText *TitleText;
244 wxPanel *TitlePanel;
245 wxTextCtrl *MainEditBox;
246 wxButton *CreateNewAccountBtn;
247 wxButton *LoadSaveDataBtn;
248 wxMenuBar *MainMenu;
249 wxFileDialog *ChooseFileDialog;
250 wxPanel *ExistingAccountsPanel;
251 wxSingleChoiceDialog *ChooseAccount;
252 wxArrayString arrOfAccs;
253
254 wxButton *SubmitAccountInfo;
255
256 wxPanel *CreateAccountPanel;
257
258 wxTextCtrl *EnterFileNameTextCtrl;
259 wxTextCtrl *EnterNameAcctTextCtrl;
260 wxTextCtrl *EnterBalanceTextCtrl;
261
262 wxDirPickerCtrl *InitialFileSaveDir;
263
264 wxString SAVE_DIR;
265
266 // Main Options Panel Components
267 wxPanel *MainOptionsPanel;
268 wxButton *ToolsBtn;
269 wxButton *ExitBtnMainPanel;
270 wxButton *SwitchAccountsBtn;
271 wxButton *CreateNewAccBtn;
272 wxButton *UpdateAccountBtn;
273 wxButton *ViewAccountBtn;
274 wxStaticText *AccountHomeTitle;
275 wxStaticText *AccountNameHomeTitle;
276
277 // View Account Panel Components
278 bool canUpdateGrid = true;
279 wxPanel *ViewAccountPanel;
280 wxGrid *TransactionsGrid;
281 wxGrid *IncomeGrid;
282 wxStaticBox *IncomeHistoryBox;
283 wxStaticBox *TransactionsBox;
284 wxStaticText *AccName; // these two variables can probably be reused
285 wxStaticText *AccBalance; //
286 string *transName;
287 string *transPrice;
288 string *transRecurring;
289 string *transDate;
290 string *incomeVals;
291 string *incomeDates;
292 wxButton *GoBackViewBtn;
293
294 //Update Account Panel Components
295 wxPanel *UpdateAccountPanel;
296 wxStaticText *UpdateAccTitleText;
297 wxButton *ChangeAccNameBtn;
298 wxButton *UpdateBalanceBtn;
299 wxButton *UpdateTransactionsButton;
300 wxButton *ReturnToHomeBtn;
301 wxStaticText *Title_UpdateAcc;
302 wxTextEntryDialog *EnterNewNameDialog;
303 wxTextEntryDialog *EnterNewBalanceDialog;
304 wxTextEntryDialog *EnterExpenseName;
305 wxTextEntryDialog *EnterExpensePrice;
306 wxTextEntryDialog *EnterExpenseDate;
307 wxTextEntryDialog *EnterExpenseRecurring;
308 wxTextEntryDialog *CreateAcc_NAME;
309 wxTextEntryDialog *CreateAcc_BAL;
310
311 //Tools Panel Components;
312 wxPanel *ToolsPanel;
313 wxButton *AccHomeFromToolsBtn;
314
315 wxButton *LoanCalculatorBtn;
316 wxTextEntryDialog *LoanCalculatorAmt;
317 wxTextEntryDialog *LoanCalculatorInterest;
318 wxTextEntryDialog *LoanCalculatorTerm;
319 wxMessageDialog *LoanCalculatorAns;
320
321 wxButton *CreditCardBtn;
322 wxTextEntryDialog *CreditCardBalance;
323 wxTextEntryDialog *CreditCardPayment;
324 wxTextEntryDialog *CreditCardInterest;
325 wxMessageDialog *CreditCardAns;
326
327 wxButton *DoubleInvestmentBtn;
328 wxTextEntryDialog *DoubleInvestmentRate;
329 wxMessageDialog *DoubleInvestmentAns;
330
331 wxButton *LeverageRatioBtn;
332 wxTextEntryDialog *LeverageRatioDebts;
333 wxMessageDialog *LeverageRatioAns;
334
335 wxButton *AvgGrowthRateBtn;
336 wxTextEntryDialog *AvgGrowthInitVal;
337 wxTextEntryDialog *AvgGrowthFinalVal;
338 wxTextEntryDialog *AvgGrowthYears;
339 wxMessageDialog *AvgGrowthAns;
340
341 wxButton *NowOrLaterBtn;
342 wxTextEntryDialog *NowOrLaterPrice;
343 wxTextEntryDialog *NowOrLaterInterest;
344 wxTextEntryDialog *NowOrLaterPayments;
345 wxMessageDialog *NowOrLaterAns;
346
347 wxButton *ViewCashFlowBtn;
348 wxMessageDialog *CashFlowDialog;
349
350 wxButton *AddIncomeBtn;
351 wxTextEntryDialog *AddIncomeIncome;
352 wxTextEntryDialog *AddIncomeDate;
353 wxMessageDialog *AddIncomeAns;
354
355 wxStaticText *ToolsText;
356
357 Account MAIN_ACCOUNT;
358 nlohmann::json data;
359
365 void loadAccountData(nlohmann::json &j, bool &fileFound);
366
367 void loadAccountData(nlohmann::json &j);
368
374 wxArrayString generateCurrentAccountsList(nlohmann::json &data);
375
382 void generateAccountMapFromJSON(std::map<string, Account> &accMap, nlohmann::json data);
383
384 Account fromJSON(nlohmann::json &j, const std::string &nameOf);
385
386
393 void fromJSON(const nlohmann::json &j, Account &acc, const string &nameOf);
394
400 void toJSON(nlohmann::json &j, std::map<string, Account> accs);
401
407 void saveInit(nlohmann::json &j);
408
414 void saveData(std::map<string, Account> accounts);
415
419 void OnClose(wxCloseEvent &event);
420
424 void CreateGUIControls();
425
429 void initializeAccountGrid();
430};
431
432enum
433{
434 TEXT_Main = wxID_HIGHEST + 1,
456
457 //Main Options Panel ENUMS
466
467 //View Account Panel
477
478 //update account panel
486
487 //Tools Panel
498
499#endif //PERSONALFINANCE_MAINWINDOW_H
@ BTN_NOWORLATER
Definition: MainWindow.h:493
@ BTN_HOMEFROMVIEW
Definition: MainWindow.h:475
@ BTN_UPDATEBALANCE
Definition: MainWindow.h:482
@ ID_CREATESAVEBTN
Definition: MainWindow.h:444
@ TEXT_FILENAME
Definition: MainWindow.h:452
@ ID_MAINOPTIONSPANEL
Definition: MainWindow.h:455
@ TEXT_ACCTBALANCE
Definition: MainWindow.h:451
@ ID_VIEWACCPANEL
Definition: MainWindow.h:468
@ MENU_SaveAs
Definition: MainWindow.h:438
@ ID_EXISTINGACCOUNTSPANEL
Definition: MainWindow.h:446
@ BTN_AVGGROWTHRATE
Definition: MainWindow.h:492
@ ID_INCOMEHISTORYBOX
Definition: MainWindow.h:471
@ TEXT_ACCOUNTNAMEHOMETITLE
Definition: MainWindow.h:465
@ ID_TRANSACTIONSBOX
Definition: MainWindow.h:472
@ BTN_VIEWCASHFLOW
Definition: MainWindow.h:494
@ BTN_EXITMAINPANEL
Definition: MainWindow.h:459
@ ID_TRANSACTIONSV
Definition: MainWindow.h:470
@ ID_INCOMELISTV
Definition: MainWindow.h:469
@ BTN_VIEWACCBTN
Definition: MainWindow.h:463
@ MENU_Open
Definition: MainWindow.h:436
@ TEXT_NAMEACCT
Definition: MainWindow.h:450
@ TEXT_Main
Definition: MainWindow.h:434
@ BTN_LEVERAGERATIOBTN
Definition: MainWindow.h:491
@ TEXT_TOOLSTEXT
Definition: MainWindow.h:496
@ BTN_GOACCHOME
Definition: MainWindow.h:476
@ ID_CURRBALANCE
Definition: MainWindow.h:474
@ MENU_Quit
Definition: MainWindow.h:439
@ BTN_RETURNHOMEFROMUPDATEACC
Definition: MainWindow.h:485
@ ID_FOUNDACCOUNTCHOICES
Definition: MainWindow.h:447
@ BTN_UPDATEACCBTN
Definition: MainWindow.h:462
@ ID_LOADSAVEBTN
Definition: MainWindow.h:445
@ BTN_UPDATETRANS
Definition: MainWindow.h:483
@ BTN_ADDINCOME
Definition: MainWindow.h:495
@ ID_ACCOUNTSPANEL
Definition: MainWindow.h:440
@ BTN_CREATENEWACCBTN
Definition: MainWindow.h:461
@ BTN_UPDATENAME
Definition: MainWindow.h:481
@ MENU_New
Definition: MainWindow.h:435
@ TEXT_UPDATETITLETXT
Definition: MainWindow.h:480
@ ID_UPDATEACCPANEL
Definition: MainWindow.h:479
@ BTN_CREDITCARDBTN
Definition: MainWindow.h:489
@ BTN_SWITCHACCBTN
Definition: MainWindow.h:460
@ ID_ENTERBUTTON
Definition: MainWindow.h:441
@ MENU_Save
Definition: MainWindow.h:437
@ ID_TITLEPANEL
Definition: MainWindow.h:443
@ ID_CREATEACCTPANEL
Definition: MainWindow.h:449
@ BTN_TOOLSBTN
Definition: MainWindow.h:458
@ ID_NEXTPAGECHOOSEACCBTN
Definition: MainWindow.h:448
@ ID_CURRACCNAME
Definition: MainWindow.h:473
@ BTN_SUBMITACCINFO
Definition: MainWindow.h:453
@ BTN_LOANCALCULATOR
Definition: MainWindow.h:488
@ ID_TITLETEXT
Definition: MainWindow.h:442
@ TEXT_ACCOUNTHOMETITLE
Definition: MainWindow.h:464
@ BTN_DOUBLEINVESTMENTBTN
Definition: MainWindow.h:490
@ DIRP_SAVELOC
Definition: MainWindow.h:454
@ BTN_CREATENEWACC
Definition: MainWindow.h:484
The Account class is used to perform various operations on an Account object.
Definition: Account.h:41
The GUI class.
Definition: MainWindow.h:61
void OnCreateNewAccount(wxCommandEvent &event)
Creates a new account.
void OnLoanCalculatorClick(wxCommandEvent &event)
void OnLeverageRatioClick(wxCommandEvent &event)
void OnCreditCardClick(wxCommandEvent &event)
void OnGoToAccHome(wxCommandEvent &event)
Set current panel to the Account Home Panel.
void OnUpdateName(wxCommandEvent &event)
Creates a text dialog that allows the user to set the name of the current account.
void setPathName(wxString path)
Sets the name of the path defined by the user's input.
void OnSwitchAccount(wxCommandEvent &event)
Allows the user to switch the account currently being used.
void EnterButtonClick(wxCommandEvent &event)
Event when the Enter Button is clicked.
void UseExistingAcctClick(wxCommandEvent &event)
Event when the Existing Account Button is pressed.
void OnAccountSelected(wxCommandEvent &event)
On the Account Selected Event.
void OnNowOrLater(wxCommandEvent &event)
void OnUpdateTransactions(wxCommandEvent &event)
Creates a text dialog that allows the user to enter a new transaction.
void OnSaveFileAs(wxCommandEvent &event)
Save file as.
void OnUpdateAccClick(wxCommandEvent &event)
Allows the user to update the current account.
void OnOpenFile(wxCommandEvent &event)
Opening a file.
void OnDoubleInvestmentClick(wxCommandEvent &event)
void OnSaveFile(wxCommandEvent &event)
Save file.
void OnViewAccountClick(wxCommandEvent &event)
On the View Account Button Click.
void ExitButtonClick(wxCommandEvent &event)
Event when the Exit Button is pressed.
void OnViewCashFlow(wxCommandEvent &event)
virtual ~MainWindow()
void OnHomeFromViewPanel(wxCommandEvent &event)
void CreateNewSaveDataClick(wxCommandEvent &event)
Event when the Create New Save Data button is clicked.
void OnToolsBtnClick(wxCommandEvent &event)
wxString getPathName()
Returns the name of the path.
void OnQuit(wxCommandEvent &event)
Quits the application.
void OnAccInfoSubmit(wxCommandEvent &event)
Event when the Submit button is pressed.
MainWindow(wxWindow *parent, wxWindowID id, const wxString &title, const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxDefaultSize, long style=wxDEFAULT_FRAME_STYLE, const wxString &name=wxFrameNameStr)
Constructor inherited from wxWindow.
void OnAverageGrowthClick(wxCommandEvent &event)
void OnNewFile(wxCommandEvent &event)
Opens a file.
void OnAddIncome(wxCommandEvent &event)
void OnUpdateBalance(wxCommandEvent &event)
Creates a text dialog that allows the user to update the account balance.