about summary refs log tree commit diff stats
path: root/src/tracker_frame.h
blob: 131c7b81ce5671d9292004acb919f6a490406ced (plain) (blame)
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
#ifndef TRACKER_FRAME_H_86BD8DFB
#define TRACKER_FRAME_H_86BD8DFB

#include <wx/wxprec.h>

#ifndef WX_PRECOMP
#include <wx/wx.h>
#endif

#include <memory>

#include "ap_state.h"
#include "icons.h"
#include "updater.h"

class AchievementsPane;
class ItemsPane;
class LogDialog;
class OptionsPane;
class PaintingsPane;
class SubwayMap;
class TrackerPanel;
class wxBookCtrlEvent;
class wxNotebook;
class wxSplitterEvent;
class wxSplitterWindow;

class ApConnectEvent : public wxEvent {
 public:
  ApConnectEvent(wxEventType eventType, int winid, std::string server,
                 std::string user, std::string pass)
      : wxEvent(winid, eventType),
        ap_server_(std::move(server)),
        ap_user_(std::move(user)),
        ap_pass_(std::move(pass)) {}

  const std::string &GetServer() const { return ap_server_; }

  const std::string &GetUser() const { return ap_user_; }

  const std::string &GetPass() const { return ap_pass_; }

  virtual wxEvent *Clone() const { return new ApConnectEvent(*this); }

 private:
  std::string ap_server_;
  std::string ap_user_;
  std::string ap_pass_;
};

struct StateUpdate {
  std::vector<ItemState> items;
  bool progression_items = false;
  std::vector<std::string> paintings;
  bool achievements = false;
  bool open_panels_tab = false;
  bool cleared_locations = false;
  bool hunt_panels = false;
  bool player_position = false;
  bool changed_settings = false;
};

class StateChangedEvent : public wxEvent {
 public:
  StateChangedEvent(wxEventType eventType, int winid, StateUpdate state)
      : wxEvent(winid, eventType), state_(std::move(state)) {}

  const StateUpdate &GetState() const { return state_; }

  virtual wxEvent *Clone() const { return new StateChangedEvent(*this); }

 private:
  StateUpdate state_;
};

wxDECLARE_EVENT(STATE_RESET, wxCommandEvent);
wxDECLARE_EVENT(STATE_CHANGED, StateChangedEvent);
wxDECLARE_EVENT(STATUS_CHANGED, wxCommandEvent);
wxDECLARE_EVENT(CONNECT_TO_AP, ApConnectEvent);

class TrackerFrame : public wxFrame {
 public:
  TrackerFrame();

  void ConnectToAp(std::string server, std::string user, std::string pass);
  void UpdateStatusMessage();

  void ResetIndicators();
  void UpdateIndicators(StateUpdate state);

 private:
  void OnExit(wxCommandEvent &event);
  void OnAbout(wxCommandEvent &event);
  void OnApConnect(wxCommandEvent &event);
  void OnIpcConnect(wxCommandEvent &event);
  void OnSettings(wxCommandEvent &event);
  void OnCheckForUpdates(wxCommandEvent &event);
  void OnZoomIn(wxCommandEvent &event);
  void OnZoomOut(wxCommandEvent &event);
  void OnOpenLogWindow(wxCommandEvent &event);
  void OnCloseLogWindow(wxCloseEvent &event);
  void OnChangePage(wxBookCtrlEvent &event);
  void OnOpenFile(wxCommandEvent &event);
  void OnSashPositionChanged(wxSplitterEvent &event);

  void OnStateReset(wxCommandEvent &event);
  void OnStateChanged(StateChangedEvent &event);
  void OnStatusChanged(wxCommandEvent &event);
  void OnConnectToAp(ApConnectEvent &event);
  
  std::unique_ptr<Updater> updater_;

  wxSplitterWindow *splitter_window_;
  wxNotebook *notebook_;
  TrackerPanel *tracker_panel_;
  AchievementsPane *achievements_pane_;
  ItemsPane *items_pane_;
  OptionsPane *options_pane_;
  PaintingsPane *paintings_pane_;
  SubwayMap *subway_map_;
  TrackerPanel *panels_panel_ = nullptr;
  LogDialog *log_dialog_ = nullptr;

  wxMenuItem *zoom_in_menu_item_;
  wxMenuItem *zoom_out_menu_item_;

  IconCache icons_;
};

#endif /* end of include guard: TRACKER_FRAME_H_86BD8DFB */