From f8f55976533ac3b77bb8d31697ba2f1e54a994c1 Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Sat, 8 Mar 2025 10:52:51 -0500 Subject: Made indicator updates more fine-grained --- src/tracker_frame.cpp | 73 ++++++++++++++++++++++++--------------------------- 1 file changed, 35 insertions(+), 38 deletions(-) (limited to 'src/tracker_frame.cpp') 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 { }; wxDEFINE_EVENT(STATE_RESET, wxCommandEvent); -wxDEFINE_EVENT(STATE_CHANGED, wxCommandEvent); +wxDEFINE_EVENT(STATE_CHANGED, StateChangedEvent); wxDEFINE_EVENT(STATUS_CHANGED, wxCommandEvent); -wxDEFINE_EVENT(REDRAW_POSITION, wxCommandEvent); wxDEFINE_EVENT(CONNECT_TO_AP, ApConnectEvent); TrackerFrame::TrackerFrame() @@ -112,7 +111,6 @@ TrackerFrame::TrackerFrame() Bind(STATE_RESET, &TrackerFrame::OnStateReset, this); Bind(STATE_CHANGED, &TrackerFrame::OnStateChanged, this); Bind(STATUS_CHANGED, &TrackerFrame::OnStatusChanged, this); - Bind(REDRAW_POSITION, &TrackerFrame::OnRedrawPosition, this); Bind(CONNECT_TO_AP, &TrackerFrame::OnConnectToAp, this); wxSize logicalSize = FromDIP(wxSize(1280, 728)); @@ -173,15 +171,8 @@ void TrackerFrame::ResetIndicators() { QueueEvent(new wxCommandEvent(STATE_RESET)); } -void TrackerFrame::UpdateIndicators(UpdateIndicatorsMode mode) { - auto evt = new wxCommandEvent(STATE_CHANGED); - evt->SetInt(static_cast(mode)); - - QueueEvent(evt); -} - -void TrackerFrame::RedrawPosition() { - QueueEvent(new wxCommandEvent(REDRAW_POSITION)); +void TrackerFrame::UpdateIndicators(StateUpdate state) { + QueueEvent(new StateChangedEvent(STATE_CHANGED, GetId(), std::move(state))); } void TrackerFrame::OnAbout(wxCommandEvent &event) { @@ -250,7 +241,8 @@ void TrackerFrame::OnSettings(wxCommandEvent &event) { GetTrackerConfig().track_position = dlg.GetTrackPosition(); GetTrackerConfig().Save(); - UpdateIndicators(); + UpdateIndicators( + StateUpdate{.cleared_locations = true, .player_position = true}); } } @@ -304,7 +296,7 @@ void TrackerFrame::OnSashPositionChanged(wxSplitterEvent& event) { void TrackerFrame::OnStateReset(wxCommandEvent &event) { tracker_panel_->UpdateIndicators(); achievements_pane_->UpdateIndicators(); - paintings_pane_->UpdateIndicators(); + paintings_pane_->ResetIndicators(); subway_map_->OnConnect(); if (panels_panel_ != nullptr) { notebook_->DeletePage(notebook_->FindPage(panels_panel_)); @@ -313,19 +305,10 @@ void TrackerFrame::OnStateReset(wxCommandEvent &event) { Refresh(); } -void TrackerFrame::OnStateChanged(wxCommandEvent &event) { - UpdateIndicatorsMode mode = static_cast(event.GetInt()); +void TrackerFrame::OnStateChanged(StateChangedEvent &event) { + const StateUpdate &state = event.GetState(); - if (mode == kUPDATE_ALL_INDICATORS) { - tracker_panel_->UpdateIndicators(); - achievements_pane_->UpdateIndicators(); - paintings_pane_->UpdateIndicators(); - subway_map_->UpdateIndicators(); - if (panels_panel_ != nullptr) { - panels_panel_->UpdateIndicators(); - } - Refresh(); - } else if (mode == kUPDATE_ONLY_PANELS) { + if (state.open_panels_tab) { if (panels_panel_ == nullptr) { panels_panel_ = new TrackerPanel(notebook_); panels_panel_->SetPanelsMode(); @@ -335,25 +318,39 @@ void TrackerFrame::OnStateChanged(wxCommandEvent &event) { if (notebook_->GetSelection() == 2) { Refresh(); } - } -} - -void TrackerFrame::OnStatusChanged(wxCommandEvent &event) { - SetStatusText(wxString::FromUTF8(GetStatusMessage())); -} -void TrackerFrame::OnRedrawPosition(wxCommandEvent &event) { - if (!GetTrackerConfig().track_position) { return; } + + if (!state.items.empty() || !state.paintings.empty() || + state.cleared_locations) { + tracker_panel_->UpdateIndicators(); + subway_map_->UpdateIndicators(); + if (panels_panel_ != nullptr) { + panels_panel_->UpdateIndicators(); + } + Refresh(); + } else if (state.player_position && GetTrackerConfig().track_position) { + if (notebook_->GetSelection() == 0) { + tracker_panel_->Refresh(); + } else if (notebook_->GetSelection() == 2) { + panels_panel_->Refresh(); + } + } - if (notebook_->GetSelection() == 0) { - tracker_panel_->Refresh(); - } else if (notebook_->GetSelection() == 2) { - panels_panel_->Refresh(); + if (state.achievements) { + achievements_pane_->UpdateIndicators(); + } + + if (!state.paintings.empty()) { + paintings_pane_->UpdateIndicators(state.paintings); } } +void TrackerFrame::OnStatusChanged(wxCommandEvent &event) { + SetStatusText(wxString::FromUTF8(GetStatusMessage())); +} + void TrackerFrame::OnConnectToAp(ApConnectEvent &event) { AP_Connect(event.GetServer(), event.GetUser(), event.GetPass()); } -- cgit 1.4.1