about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/subway_map.cpp30
-rw-r--r--src/subway_map.h3
-rw-r--r--src/tracker_frame.cpp45
-rw-r--r--src/tracker_frame.h9
4 files changed, 78 insertions, 9 deletions
diff --git a/src/subway_map.cpp b/src/subway_map.cpp index 98d544c..69bf51b 100644 --- a/src/subway_map.cpp +++ b/src/subway_map.cpp
@@ -119,6 +119,26 @@ void SubwayMap::UpdateSunwarp(SubwaySunwarp from_sunwarp,
119 GD_GetSubwayItemForSunwarp(to_sunwarp)); 119 GD_GetSubwayItemForSunwarp(to_sunwarp));
120} 120}
121 121
122void SubwayMap::Zoom(bool in) {
123 wxPoint focus_point;
124
125 if (mouse_position_) {
126 focus_point = *mouse_position_;
127 } else {
128 focus_point = {GetSize().GetWidth() / 2, GetSize().GetHeight() / 2};
129 }
130
131 if (in) {
132 if (zoom_ < 3.0) {
133 SetZoom(zoom_ + 0.25, focus_point);
134 }
135 } else {
136 if (zoom_ > 1.0) {
137 SetZoom(zoom_ - 0.25, focus_point);
138 }
139 }
140}
141
122void SubwayMap::OnPaint(wxPaintEvent &event) { 142void SubwayMap::OnPaint(wxPaintEvent &event) {
123 if (GetSize() != rendered_.GetSize()) { 143 if (GetSize() != rendered_.GetSize()) {
124 wxSize panel_size = GetSize(); 144 wxSize panel_size = GetSize();
@@ -372,6 +392,8 @@ void SubwayMap::OnMouseMove(wxMouseEvent &event) {
372 392
373 SetScrollSpeed(scroll_x, scroll_y); 393 SetScrollSpeed(scroll_x, scroll_y);
374 394
395 mouse_position_ = event.GetPosition();
396
375 event.Skip(); 397 event.Skip();
376} 398}
377 399
@@ -390,7 +412,10 @@ void SubwayMap::OnMouseScroll(wxMouseEvent &event) {
390 event.Skip(); 412 event.Skip();
391} 413}
392 414
393void SubwayMap::OnMouseLeave(wxMouseEvent &event) { SetScrollSpeed(0, 0); } 415void SubwayMap::OnMouseLeave(wxMouseEvent &event) {
416 SetScrollSpeed(0, 0);
417 mouse_position_ = std::nullopt;
418}
394 419
395void SubwayMap::OnTimer(wxTimerEvent &event) { 420void SubwayMap::OnTimer(wxTimerEvent &event) {
396 SetZoomPos({zoom_x_ + scroll_x_, zoom_y_ + scroll_y_}); 421 SetZoomPos({zoom_x_ + scroll_x_, zoom_y_ + scroll_y_});
@@ -464,7 +489,8 @@ void SubwayMap::Redraw() {
464 489
465 wxPoint real_area_pos = {subway_item.x, subway_item.y}; 490 wxPoint real_area_pos = {subway_item.x, subway_item.y};
466 491
467 int real_area_size = (draw_type == ItemDrawType::kOwl ? OWL_ACTUAL_SIZE : AREA_ACTUAL_SIZE); 492 int real_area_size =
493 (draw_type == ItemDrawType::kOwl ? OWL_ACTUAL_SIZE : AREA_ACTUAL_SIZE);
468 494
469 if (draw_type == ItemDrawType::kBox) { 495 if (draw_type == ItemDrawType::kBox) {
470 dc.SetPen(*wxThePenList->FindOrCreatePen(*wxBLACK, 1)); 496 dc.SetPen(*wxThePenList->FindOrCreatePen(*wxBLACK, 1));
diff --git a/src/subway_map.h b/src/subway_map.h index e891058..986998a 100644 --- a/src/subway_map.h +++ b/src/subway_map.h
@@ -25,6 +25,7 @@ class SubwayMap : public wxPanel {
25 void OnConnect(); 25 void OnConnect();
26 void UpdateIndicators(); 26 void UpdateIndicators();
27 void UpdateSunwarp(SubwaySunwarp from_sunwarp, SubwaySunwarp to_sunwarp); 27 void UpdateSunwarp(SubwaySunwarp from_sunwarp, SubwaySunwarp to_sunwarp);
28 void Zoom(bool in);
28 29
29 private: 30 private:
30 void OnPaint(wxPaintEvent &event); 31 void OnPaint(wxPaintEvent &event);
@@ -65,6 +66,8 @@ class SubwayMap : public wxPanel {
65 66
66 wxSlider *zoom_slider_; 67 wxSlider *zoom_slider_;
67 68
69 std::optional<wxPoint> mouse_position_;
70
68 struct GetItemBox { 71 struct GetItemBox {
69 quadtree::Box<float> operator()(const int &id) const; 72 quadtree::Box<float> operator()(const int &id) const;
70 }; 73 };
diff --git a/src/tracker_frame.cpp b/src/tracker_frame.cpp index e944704..a15a6b4 100644 --- a/src/tracker_frame.cpp +++ b/src/tracker_frame.cpp
@@ -2,6 +2,7 @@
2 2
3#include <wx/aboutdlg.h> 3#include <wx/aboutdlg.h>
4#include <wx/choicebk.h> 4#include <wx/choicebk.h>
5#include <wx/notebook.h>
5#include <wx/webrequest.h> 6#include <wx/webrequest.h>
6 7
7#include <nlohmann/json.hpp> 8#include <nlohmann/json.hpp>
@@ -19,7 +20,9 @@
19enum TrackerFrameIds { 20enum TrackerFrameIds {
20 ID_CONNECT = 1, 21 ID_CONNECT = 1,
21 ID_CHECK_FOR_UPDATES = 2, 22 ID_CHECK_FOR_UPDATES = 2,
22 ID_SETTINGS = 3 23 ID_SETTINGS = 3,
24 ID_ZOOM_IN = 4,
25 ID_ZOOM_OUT = 5,
23}; 26};
24 27
25wxDEFINE_EVENT(STATE_RESET, wxCommandEvent); 28wxDEFINE_EVENT(STATE_RESET, wxCommandEvent);
@@ -38,12 +41,20 @@ TrackerFrame::TrackerFrame()
38 menuFile->Append(ID_SETTINGS, "&Settings"); 41 menuFile->Append(ID_SETTINGS, "&Settings");
39 menuFile->Append(wxID_EXIT); 42 menuFile->Append(wxID_EXIT);
40 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
41 wxMenu *menuHelp = new wxMenu(); 51 wxMenu *menuHelp = new wxMenu();
42 menuHelp->Append(wxID_ABOUT); 52 menuHelp->Append(wxID_ABOUT);
43 menuHelp->Append(ID_CHECK_FOR_UPDATES, "Check for Updates"); 53 menuHelp->Append(ID_CHECK_FOR_UPDATES, "Check for Updates");
44 54
45 wxMenuBar *menuBar = new wxMenuBar(); 55 wxMenuBar *menuBar = new wxMenuBar();
46 menuBar->Append(menuFile, "&File"); 56 menuBar->Append(menuFile, "&File");
57 menuBar->Append(menuView, "&View");
47 menuBar->Append(menuHelp, "&Help"); 58 menuBar->Append(menuHelp, "&Help");
48 59
49 SetMenuBar(menuBar); 60 SetMenuBar(menuBar);
@@ -57,6 +68,9 @@ TrackerFrame::TrackerFrame()
57 Bind(wxEVT_MENU, &TrackerFrame::OnSettings, this, ID_SETTINGS); 68 Bind(wxEVT_MENU, &TrackerFrame::OnSettings, this, ID_SETTINGS);
58 Bind(wxEVT_MENU, &TrackerFrame::OnCheckForUpdates, this, 69 Bind(wxEVT_MENU, &TrackerFrame::OnCheckForUpdates, this,
59 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);
60 Bind(STATE_RESET, &TrackerFrame::OnStateReset, this); 74 Bind(STATE_RESET, &TrackerFrame::OnStateReset, this);
61 Bind(STATE_CHANGED, &TrackerFrame::OnStateChanged, this); 75 Bind(STATE_CHANGED, &TrackerFrame::OnStateChanged, this);
62 Bind(STATUS_CHANGED, &TrackerFrame::OnStatusChanged, this); 76 Bind(STATUS_CHANGED, &TrackerFrame::OnStatusChanged, this);
@@ -66,15 +80,15 @@ TrackerFrame::TrackerFrame()
66 wxChoicebook *choicebook = new wxChoicebook(this, wxID_ANY); 80 wxChoicebook *choicebook = new wxChoicebook(this, wxID_ANY);
67 choicebook->AddPage(achievements_pane_, "Achievements"); 81 choicebook->AddPage(achievements_pane_, "Achievements");
68 82
69 wxNotebook *rightpane = new wxNotebook(this, wxID_ANY); 83 notebook_ = new wxNotebook(this, wxID_ANY);
70 tracker_panel_ = new TrackerPanel(rightpane); 84 tracker_panel_ = new TrackerPanel(notebook_);
71 subway_map_ = new SubwayMap(rightpane); 85 subway_map_ = new SubwayMap(notebook_);
72 rightpane->AddPage(tracker_panel_, "Map"); 86 notebook_->AddPage(tracker_panel_, "Map");
73 rightpane->AddPage(subway_map_, "Subway"); 87 notebook_->AddPage(subway_map_, "Subway");
74 88
75 wxBoxSizer *top_sizer = new wxBoxSizer(wxHORIZONTAL); 89 wxBoxSizer *top_sizer = new wxBoxSizer(wxHORIZONTAL);
76 top_sizer->Add(choicebook, wxSizerFlags().Expand().Proportion(1)); 90 top_sizer->Add(choicebook, wxSizerFlags().Expand().Proportion(1));
77 top_sizer->Add(rightpane, wxSizerFlags().Expand().Proportion(3)); 91 top_sizer->Add(notebook_, wxSizerFlags().Expand().Proportion(3));
78 92
79 SetSizerAndFit(top_sizer); 93 SetSizerAndFit(top_sizer);
80 SetSize(1280, 728); 94 SetSize(1280, 728);
@@ -174,6 +188,23 @@ void TrackerFrame::OnCheckForUpdates(wxCommandEvent &event) {
174 CheckForUpdates(/*manual=*/true); 188 CheckForUpdates(/*manual=*/true);
175} 189}
176 190
191void TrackerFrame::OnZoomIn(wxCommandEvent &event) {
192 if (notebook_->GetSelection() == 1) {
193 subway_map_->Zoom(true);
194 }
195}
196
197void TrackerFrame::OnZoomOut(wxCommandEvent& event) {
198 if (notebook_->GetSelection() == 1) {
199 subway_map_->Zoom(false);
200 }
201}
202
203void TrackerFrame::OnChangePage(wxBookCtrlEvent &event) {
204 zoom_in_menu_item_->Enable(event.GetSelection() == 1);
205 zoom_out_menu_item_->Enable(event.GetSelection() == 1);
206}
207
177void TrackerFrame::OnStateReset(wxCommandEvent& event) { 208void TrackerFrame::OnStateReset(wxCommandEvent& event) {
178 tracker_panel_->UpdateIndicators(); 209 tracker_panel_->UpdateIndicators();
179 achievements_pane_->UpdateIndicators(); 210 achievements_pane_->UpdateIndicators();
diff --git a/src/tracker_frame.h b/src/tracker_frame.h index f1d7171..f7cb3f2 100644 --- a/src/tracker_frame.h +++ b/src/tracker_frame.h
@@ -10,6 +10,8 @@
10class AchievementsPane; 10class AchievementsPane;
11class SubwayMap; 11class SubwayMap;
12class TrackerPanel; 12class TrackerPanel;
13class wxBookCtrlEvent;
14class wxNotebook;
13 15
14wxDECLARE_EVENT(STATE_RESET, wxCommandEvent); 16wxDECLARE_EVENT(STATE_RESET, wxCommandEvent);
15wxDECLARE_EVENT(STATE_CHANGED, wxCommandEvent); 17wxDECLARE_EVENT(STATE_CHANGED, wxCommandEvent);
@@ -30,6 +32,9 @@ class TrackerFrame : public wxFrame {
30 void OnConnect(wxCommandEvent &event); 32 void OnConnect(wxCommandEvent &event);
31 void OnSettings(wxCommandEvent &event); 33 void OnSettings(wxCommandEvent &event);
32 void OnCheckForUpdates(wxCommandEvent &event); 34 void OnCheckForUpdates(wxCommandEvent &event);
35 void OnZoomIn(wxCommandEvent &event);
36 void OnZoomOut(wxCommandEvent &event);
37 void OnChangePage(wxBookCtrlEvent &event);
33 38
34 void OnStateReset(wxCommandEvent &event); 39 void OnStateReset(wxCommandEvent &event);
35 void OnStateChanged(wxCommandEvent &event); 40 void OnStateChanged(wxCommandEvent &event);
@@ -37,9 +42,13 @@ class TrackerFrame : public wxFrame {
37 42
38 void CheckForUpdates(bool manual); 43 void CheckForUpdates(bool manual);
39 44
45 wxNotebook *notebook_;
40 TrackerPanel *tracker_panel_; 46 TrackerPanel *tracker_panel_;
41 AchievementsPane *achievements_pane_; 47 AchievementsPane *achievements_pane_;
42 SubwayMap *subway_map_; 48 SubwayMap *subway_map_;
49
50 wxMenuItem *zoom_in_menu_item_;
51 wxMenuItem *zoom_out_menu_item_;
43}; 52};
44 53
45#endif /* end of include guard: TRACKER_FRAME_H_86BD8DFB */ 54#endif /* end of include guard: TRACKER_FRAME_H_86BD8DFB */