diff options
Diffstat (limited to 'src/tracker_frame.cpp')
-rw-r--r-- | src/tracker_frame.cpp | 73 |
1 files changed, 35 insertions, 38 deletions
diff --git a/src/tracker_frame.cpp b/src/tracker_frame.cpp index a697f9a..dc6c283 100644 --- a/src/tracker_frame.cpp +++ b/src/tracker_frame.cpp | |||
@@ -51,9 +51,8 @@ enum TrackerFrameIds { | |||
51 | }; | 51 | }; |
52 | 52 | ||
53 | wxDEFINE_EVENT(STATE_RESET, wxCommandEvent); | 53 | wxDEFINE_EVENT(STATE_RESET, wxCommandEvent); |
54 | wxDEFINE_EVENT(STATE_CHANGED, wxCommandEvent); | 54 | wxDEFINE_EVENT(STATE_CHANGED, StateChangedEvent); |
55 | wxDEFINE_EVENT(STATUS_CHANGED, wxCommandEvent); | 55 | wxDEFINE_EVENT(STATUS_CHANGED, wxCommandEvent); |
56 | wxDEFINE_EVENT(REDRAW_POSITION, wxCommandEvent); | ||
57 | wxDEFINE_EVENT(CONNECT_TO_AP, ApConnectEvent); | 56 | wxDEFINE_EVENT(CONNECT_TO_AP, ApConnectEvent); |
58 | 57 | ||
59 | TrackerFrame::TrackerFrame() | 58 | TrackerFrame::TrackerFrame() |
@@ -112,7 +111,6 @@ TrackerFrame::TrackerFrame() | |||
112 | Bind(STATE_RESET, &TrackerFrame::OnStateReset, this); | 111 | Bind(STATE_RESET, &TrackerFrame::OnStateReset, this); |
113 | Bind(STATE_CHANGED, &TrackerFrame::OnStateChanged, this); | 112 | Bind(STATE_CHANGED, &TrackerFrame::OnStateChanged, this); |
114 | Bind(STATUS_CHANGED, &TrackerFrame::OnStatusChanged, this); | 113 | Bind(STATUS_CHANGED, &TrackerFrame::OnStatusChanged, this); |
115 | Bind(REDRAW_POSITION, &TrackerFrame::OnRedrawPosition, this); | ||
116 | Bind(CONNECT_TO_AP, &TrackerFrame::OnConnectToAp, this); | 114 | Bind(CONNECT_TO_AP, &TrackerFrame::OnConnectToAp, this); |
117 | 115 | ||
118 | wxSize logicalSize = FromDIP(wxSize(1280, 728)); | 116 | wxSize logicalSize = FromDIP(wxSize(1280, 728)); |
@@ -173,15 +171,8 @@ void TrackerFrame::ResetIndicators() { | |||
173 | QueueEvent(new wxCommandEvent(STATE_RESET)); | 171 | QueueEvent(new wxCommandEvent(STATE_RESET)); |
174 | } | 172 | } |
175 | 173 | ||
176 | void TrackerFrame::UpdateIndicators(UpdateIndicatorsMode mode) { | 174 | void TrackerFrame::UpdateIndicators(StateUpdate state) { |
177 | auto evt = new wxCommandEvent(STATE_CHANGED); | 175 | QueueEvent(new StateChangedEvent(STATE_CHANGED, GetId(), std::move(state))); |
178 | evt->SetInt(static_cast<int>(mode)); | ||
179 | |||
180 | QueueEvent(evt); | ||
181 | } | ||
182 | |||
183 | void TrackerFrame::RedrawPosition() { | ||
184 | QueueEvent(new wxCommandEvent(REDRAW_POSITION)); | ||
185 | } | 176 | } |
186 | 177 | ||
187 | void TrackerFrame::OnAbout(wxCommandEvent &event) { | 178 | void TrackerFrame::OnAbout(wxCommandEvent &event) { |
@@ -250,7 +241,8 @@ void TrackerFrame::OnSettings(wxCommandEvent &event) { | |||
250 | GetTrackerConfig().track_position = dlg.GetTrackPosition(); | 241 | GetTrackerConfig().track_position = dlg.GetTrackPosition(); |
251 | GetTrackerConfig().Save(); | 242 | GetTrackerConfig().Save(); |
252 | 243 | ||
253 | UpdateIndicators(); | 244 | UpdateIndicators( |
245 | StateUpdate{.cleared_locations = true, .player_position = true}); | ||
254 | } | 246 | } |
255 | } | 247 | } |
256 | 248 | ||
@@ -304,7 +296,7 @@ void TrackerFrame::OnSashPositionChanged(wxSplitterEvent& event) { | |||
304 | void TrackerFrame::OnStateReset(wxCommandEvent &event) { | 296 | void TrackerFrame::OnStateReset(wxCommandEvent &event) { |
305 | tracker_panel_->UpdateIndicators(); | 297 | tracker_panel_->UpdateIndicators(); |
306 | achievements_pane_->UpdateIndicators(); | 298 | achievements_pane_->UpdateIndicators(); |
307 | paintings_pane_->UpdateIndicators(); | 299 | paintings_pane_->ResetIndicators(); |
308 | subway_map_->OnConnect(); | 300 | subway_map_->OnConnect(); |
309 | if (panels_panel_ != nullptr) { | 301 | if (panels_panel_ != nullptr) { |
310 | notebook_->DeletePage(notebook_->FindPage(panels_panel_)); | 302 | notebook_->DeletePage(notebook_->FindPage(panels_panel_)); |
@@ -313,19 +305,10 @@ void TrackerFrame::OnStateReset(wxCommandEvent &event) { | |||
313 | Refresh(); | 305 | Refresh(); |
314 | } | 306 | } |
315 | 307 | ||
316 | void TrackerFrame::OnStateChanged(wxCommandEvent &event) { | 308 | void TrackerFrame::OnStateChanged(StateChangedEvent &event) { |
317 | UpdateIndicatorsMode mode = static_cast<UpdateIndicatorsMode>(event.GetInt()); | 309 | const StateUpdate &state = event.GetState(); |
318 | 310 | ||
319 | if (mode == kUPDATE_ALL_INDICATORS) { | 311 | if (state.open_panels_tab) { |
320 | tracker_panel_->UpdateIndicators(); | ||
321 | achievements_pane_->UpdateIndicators(); | ||
322 | paintings_pane_->UpdateIndicators(); | ||
323 | subway_map_->UpdateIndicators(); | ||
324 | if (panels_panel_ != nullptr) { | ||
325 | panels_panel_->UpdateIndicators(); | ||
326 | } | ||
327 | Refresh(); | ||
328 | } else if (mode == kUPDATE_ONLY_PANELS) { | ||
329 | if (panels_panel_ == nullptr) { | 312 | if (panels_panel_ == nullptr) { |
330 | panels_panel_ = new TrackerPanel(notebook_); | 313 | panels_panel_ = new TrackerPanel(notebook_); |
331 | panels_panel_->SetPanelsMode(); | 314 | panels_panel_->SetPanelsMode(); |
@@ -335,25 +318,39 @@ void TrackerFrame::OnStateChanged(wxCommandEvent &event) { | |||
335 | if (notebook_->GetSelection() == 2) { | 318 | if (notebook_->GetSelection() == 2) { |
336 | Refresh(); | 319 | Refresh(); |
337 | } | 320 | } |
338 | } | ||
339 | } | ||
340 | |||
341 | void TrackerFrame::OnStatusChanged(wxCommandEvent &event) { | ||
342 | SetStatusText(wxString::FromUTF8(GetStatusMessage())); | ||
343 | } | ||
344 | 321 | ||
345 | void TrackerFrame::OnRedrawPosition(wxCommandEvent &event) { | ||
346 | if (!GetTrackerConfig().track_position) { | ||
347 | return; | 322 | return; |
348 | } | 323 | } |
324 | |||
325 | if (!state.items.empty() || !state.paintings.empty() || | ||
326 | state.cleared_locations) { | ||
327 | tracker_panel_->UpdateIndicators(); | ||
328 | subway_map_->UpdateIndicators(); | ||
329 | if (panels_panel_ != nullptr) { | ||
330 | panels_panel_->UpdateIndicators(); | ||
331 | } | ||
332 | Refresh(); | ||
333 | } else if (state.player_position && GetTrackerConfig().track_position) { | ||
334 | if (notebook_->GetSelection() == 0) { | ||
335 | tracker_panel_->Refresh(); | ||
336 | } else if (notebook_->GetSelection() == 2) { | ||
337 | panels_panel_->Refresh(); | ||
338 | } | ||
339 | } | ||
349 | 340 | ||
350 | if (notebook_->GetSelection() == 0) { | 341 | if (state.achievements) { |
351 | tracker_panel_->Refresh(); | 342 | achievements_pane_->UpdateIndicators(); |
352 | } else if (notebook_->GetSelection() == 2) { | 343 | } |
353 | panels_panel_->Refresh(); | 344 | |
345 | if (!state.paintings.empty()) { | ||
346 | paintings_pane_->UpdateIndicators(state.paintings); | ||
354 | } | 347 | } |
355 | } | 348 | } |
356 | 349 | ||
350 | void TrackerFrame::OnStatusChanged(wxCommandEvent &event) { | ||
351 | SetStatusText(wxString::FromUTF8(GetStatusMessage())); | ||
352 | } | ||
353 | |||
357 | void TrackerFrame::OnConnectToAp(ApConnectEvent &event) { | 354 | void TrackerFrame::OnConnectToAp(ApConnectEvent &event) { |
358 | AP_Connect(event.GetServer(), event.GetUser(), event.GetPass()); | 355 | AP_Connect(event.GetServer(), event.GetUser(), event.GetPass()); |
359 | } | 356 | } |