diff options
Diffstat (limited to 'src/tracker_frame.cpp')
-rw-r--r-- | src/tracker_frame.cpp | 82 |
1 files changed, 69 insertions, 13 deletions
diff --git a/src/tracker_frame.cpp b/src/tracker_frame.cpp index d64e0d3..107ae49 100644 --- a/src/tracker_frame.cpp +++ b/src/tracker_frame.cpp | |||
@@ -1,6 +1,8 @@ | |||
1 | #include "tracker_frame.h" | 1 | #include "tracker_frame.h" |
2 | 2 | ||
3 | #include <wx/aboutdlg.h> | ||
3 | #include <wx/choicebk.h> | 4 | #include <wx/choicebk.h> |
5 | #include <wx/notebook.h> | ||
4 | #include <wx/webrequest.h> | 6 | #include <wx/webrequest.h> |
5 | 7 | ||
6 | #include <nlohmann/json.hpp> | 8 | #include <nlohmann/json.hpp> |
@@ -10,6 +12,7 @@ | |||
10 | #include "ap_state.h" | 12 | #include "ap_state.h" |
11 | #include "connection_dialog.h" | 13 | #include "connection_dialog.h" |
12 | #include "settings_dialog.h" | 14 | #include "settings_dialog.h" |
15 | #include "subway_map.h" | ||
13 | #include "tracker_config.h" | 16 | #include "tracker_config.h" |
14 | #include "tracker_panel.h" | 17 | #include "tracker_panel.h" |
15 | #include "version.h" | 18 | #include "version.h" |
@@ -17,9 +20,12 @@ | |||
17 | enum TrackerFrameIds { | 20 | enum TrackerFrameIds { |
18 | ID_CONNECT = 1, | 21 | ID_CONNECT = 1, |
19 | ID_CHECK_FOR_UPDATES = 2, | 22 | ID_CHECK_FOR_UPDATES = 2, |
20 | ID_SETTINGS = 3 | 23 | ID_SETTINGS = 3, |
24 | ID_ZOOM_IN = 4, | ||
25 | ID_ZOOM_OUT = 5, | ||
21 | }; | 26 | }; |
22 | 27 | ||
28 | wxDEFINE_EVENT(STATE_RESET, wxCommandEvent); | ||
23 | wxDEFINE_EVENT(STATE_CHANGED, wxCommandEvent); | 29 | wxDEFINE_EVENT(STATE_CHANGED, wxCommandEvent); |
24 | wxDEFINE_EVENT(STATUS_CHANGED, wxCommandEvent); | 30 | wxDEFINE_EVENT(STATUS_CHANGED, wxCommandEvent); |
25 | 31 | ||
@@ -35,12 +41,20 @@ TrackerFrame::TrackerFrame() | |||
35 | menuFile->Append(ID_SETTINGS, "&Settings"); | 41 | menuFile->Append(ID_SETTINGS, "&Settings"); |
36 | menuFile->Append(wxID_EXIT); | 42 | menuFile->Append(wxID_EXIT); |
37 | 43 | ||
44 | wxMenu *menuView = new wxMenu(); | ||
45 | zoom_in_menu_item_ = menuView->Append(ID_ZOOM_IN, "Zoom In\tCtrl-+"); | ||
46 | zoom_out_menu_item_ = menuView->Append(ID_ZOOM_OUT, "Zoom Out\tCtrl--"); | ||
47 | |||
48 | zoom_in_menu_item_->Enable(false); | ||
49 | zoom_out_menu_item_->Enable(false); | ||
50 | |||
38 | wxMenu *menuHelp = new wxMenu(); | 51 | wxMenu *menuHelp = new wxMenu(); |
39 | menuHelp->Append(wxID_ABOUT); | 52 | menuHelp->Append(wxID_ABOUT); |
40 | menuHelp->Append(ID_CHECK_FOR_UPDATES, "Check for Updates"); | 53 | menuHelp->Append(ID_CHECK_FOR_UPDATES, "Check for Updates"); |
41 | 54 | ||
42 | wxMenuBar *menuBar = new wxMenuBar(); | 55 | wxMenuBar *menuBar = new wxMenuBar(); |
43 | menuBar->Append(menuFile, "&File"); | 56 | menuBar->Append(menuFile, "&File"); |
57 | menuBar->Append(menuView, "&View"); | ||
44 | menuBar->Append(menuHelp, "&Help"); | 58 | menuBar->Append(menuHelp, "&Help"); |
45 | 59 | ||
46 | SetMenuBar(menuBar); | 60 | SetMenuBar(menuBar); |
@@ -54,18 +68,26 @@ TrackerFrame::TrackerFrame() | |||
54 | Bind(wxEVT_MENU, &TrackerFrame::OnSettings, this, ID_SETTINGS); | 68 | Bind(wxEVT_MENU, &TrackerFrame::OnSettings, this, ID_SETTINGS); |
55 | Bind(wxEVT_MENU, &TrackerFrame::OnCheckForUpdates, this, | 69 | Bind(wxEVT_MENU, &TrackerFrame::OnCheckForUpdates, this, |
56 | ID_CHECK_FOR_UPDATES); | 70 | ID_CHECK_FOR_UPDATES); |
71 | Bind(wxEVT_MENU, &TrackerFrame::OnZoomIn, this, ID_ZOOM_IN); | ||
72 | Bind(wxEVT_MENU, &TrackerFrame::OnZoomOut, this, ID_ZOOM_OUT); | ||
73 | Bind(wxEVT_NOTEBOOK_PAGE_CHANGED, &TrackerFrame::OnChangePage, this); | ||
74 | Bind(STATE_RESET, &TrackerFrame::OnStateReset, this); | ||
57 | Bind(STATE_CHANGED, &TrackerFrame::OnStateChanged, this); | 75 | Bind(STATE_CHANGED, &TrackerFrame::OnStateChanged, this); |
58 | Bind(STATUS_CHANGED, &TrackerFrame::OnStatusChanged, this); | 76 | Bind(STATUS_CHANGED, &TrackerFrame::OnStatusChanged, this); |
59 | 77 | ||
60 | wxChoicebook *choicebook = new wxChoicebook(this, wxID_ANY); | 78 | wxChoicebook *choicebook = new wxChoicebook(this, wxID_ANY); |
61 | achievements_pane_ = new AchievementsPane(this); | 79 | achievements_pane_ = new AchievementsPane(choicebook); |
62 | choicebook->AddPage(achievements_pane_, "Achievements"); | 80 | choicebook->AddPage(achievements_pane_, "Achievements"); |
63 | 81 | ||
64 | tracker_panel_ = new TrackerPanel(this); | 82 | notebook_ = new wxNotebook(this, wxID_ANY); |
83 | tracker_panel_ = new TrackerPanel(notebook_); | ||
84 | subway_map_ = new SubwayMap(notebook_); | ||
85 | notebook_->AddPage(tracker_panel_, "Map"); | ||
86 | notebook_->AddPage(subway_map_, "Subway"); | ||
65 | 87 | ||
66 | wxBoxSizer *top_sizer = new wxBoxSizer(wxHORIZONTAL); | 88 | wxBoxSizer *top_sizer = new wxBoxSizer(wxHORIZONTAL); |
67 | top_sizer->Add(choicebook, wxSizerFlags().Expand().Proportion(1)); | 89 | top_sizer->Add(choicebook, wxSizerFlags().Expand().Proportion(1)); |
68 | top_sizer->Add(tracker_panel_, wxSizerFlags().Expand().Proportion(3)); | 90 | top_sizer->Add(notebook_, wxSizerFlags().Expand().Proportion(3)); |
69 | 91 | ||
70 | SetSizerAndFit(top_sizer); | 92 | SetSizerAndFit(top_sizer); |
71 | SetSize(1280, 728); | 93 | SetSize(1280, 728); |
@@ -96,17 +118,23 @@ void TrackerFrame::SetStatusMessage(std::string message) { | |||
96 | QueueEvent(event); | 118 | QueueEvent(event); |
97 | } | 119 | } |
98 | 120 | ||
121 | void TrackerFrame::ResetIndicators() { | ||
122 | QueueEvent(new wxCommandEvent(STATE_RESET)); | ||
123 | } | ||
124 | |||
99 | void TrackerFrame::UpdateIndicators() { | 125 | void TrackerFrame::UpdateIndicators() { |
100 | QueueEvent(new wxCommandEvent(STATE_CHANGED)); | 126 | QueueEvent(new wxCommandEvent(STATE_CHANGED)); |
101 | } | 127 | } |
102 | 128 | ||
103 | void TrackerFrame::OnAbout(wxCommandEvent &event) { | 129 | void TrackerFrame::OnAbout(wxCommandEvent &event) { |
104 | std::ostringstream message_text; | 130 | wxAboutDialogInfo about_info; |
105 | message_text << "Lingo Archipelago Tracker " << kTrackerVersion | 131 | about_info.SetName("Lingo Archipelago Tracker"); |
106 | << " by hatkirby"; | 132 | about_info.SetVersion(kTrackerVersion.ToString()); |
107 | 133 | about_info.AddDeveloper("hatkirby"); | |
108 | wxMessageBox(message_text.str(), "About lingo-ap-tracker", | 134 | about_info.AddArtist("Brenton Wildes"); |
109 | wxOK | wxICON_INFORMATION); | 135 | about_info.AddArtist("kinrah"); |
136 | |||
137 | wxAboutBox(about_info); | ||
110 | } | 138 | } |
111 | 139 | ||
112 | void TrackerFrame::OnExit(wxCommandEvent &event) { Close(true); } | 140 | void TrackerFrame::OnExit(wxCommandEvent &event) { Close(true); } |
@@ -122,7 +150,8 @@ void TrackerFrame::OnConnect(wxCommandEvent &event) { | |||
122 | std::deque<ConnectionDetails> new_history; | 150 | std::deque<ConnectionDetails> new_history; |
123 | new_history.push_back(GetTrackerConfig().connection_details); | 151 | new_history.push_back(GetTrackerConfig().connection_details); |
124 | 152 | ||
125 | for (const ConnectionDetails& details : GetTrackerConfig().connection_history) { | 153 | for (const ConnectionDetails &details : |
154 | GetTrackerConfig().connection_history) { | ||
126 | if (details != GetTrackerConfig().connection_details) { | 155 | if (details != GetTrackerConfig().connection_details) { |
127 | new_history.push_back(details); | 156 | new_history.push_back(details); |
128 | } | 157 | } |
@@ -158,9 +187,34 @@ void TrackerFrame::OnCheckForUpdates(wxCommandEvent &event) { | |||
158 | CheckForUpdates(/*manual=*/true); | 187 | CheckForUpdates(/*manual=*/true); |
159 | } | 188 | } |
160 | 189 | ||
190 | void TrackerFrame::OnZoomIn(wxCommandEvent &event) { | ||
191 | if (notebook_->GetSelection() == 1) { | ||
192 | subway_map_->Zoom(true); | ||
193 | } | ||
194 | } | ||
195 | |||
196 | void TrackerFrame::OnZoomOut(wxCommandEvent& event) { | ||
197 | if (notebook_->GetSelection() == 1) { | ||
198 | subway_map_->Zoom(false); | ||
199 | } | ||
200 | } | ||
201 | |||
202 | void TrackerFrame::OnChangePage(wxBookCtrlEvent &event) { | ||
203 | zoom_in_menu_item_->Enable(event.GetSelection() == 1); | ||
204 | zoom_out_menu_item_->Enable(event.GetSelection() == 1); | ||
205 | } | ||
206 | |||
207 | void TrackerFrame::OnStateReset(wxCommandEvent& event) { | ||
208 | tracker_panel_->UpdateIndicators(); | ||
209 | achievements_pane_->UpdateIndicators(); | ||
210 | subway_map_->OnConnect(); | ||
211 | Refresh(); | ||
212 | } | ||
213 | |||
161 | void TrackerFrame::OnStateChanged(wxCommandEvent &event) { | 214 | void TrackerFrame::OnStateChanged(wxCommandEvent &event) { |
162 | tracker_panel_->UpdateIndicators(); | 215 | tracker_panel_->UpdateIndicators(); |
163 | achievements_pane_->UpdateIndicators(); | 216 | achievements_pane_->UpdateIndicators(); |
217 | subway_map_->UpdateIndicators(); | ||
164 | Refresh(); | 218 | Refresh(); |
165 | } | 219 | } |
166 | 220 | ||
@@ -192,8 +246,10 @@ void TrackerFrame::CheckForUpdates(bool manual) { | |||
192 | std::ostringstream message_text; | 246 | std::ostringstream message_text; |
193 | message_text << "There is a newer version of Lingo AP Tracker " | 247 | message_text << "There is a newer version of Lingo AP Tracker " |
194 | "available. You have " | 248 | "available. You have " |
195 | << kTrackerVersion << ", and the latest version is " | 249 | << kTrackerVersion.ToString() |
196 | << latest_version << ". Would you like to update?"; | 250 | << ", and the latest version is " |
251 | << latest_version.ToString() | ||
252 | << ". Would you like to update?"; | ||
197 | 253 | ||
198 | if (wxMessageBox(message_text.str(), "Update available", wxYES_NO) == | 254 | if (wxMessageBox(message_text.str(), "Update available", wxYES_NO) == |
199 | wxYES) { | 255 | wxYES) { |