about summary refs log tree commit diff stats
path: root/src/tracker_panel.h
blob: e1f515d68f0dc456b4e8521bc7b957e5a205a165 (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
#ifndef TRACKER_PANEL_H_D675A54D
#define TRACKER_PANEL_H_D675A54D

#include <wx/wxprec.h>

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

#include <optional>
#include <set>
#include <string>

class AreaPopup;

class TrackerPanel : public wxPanel {
 public:
  TrackerPanel(wxWindow *parent);

  void UpdateIndicators();

  void SetSavedataPath(std::string savedata_path);

  bool IsPanelsMode() const { return panels_mode_; }

  const std::set<std::string> &GetSolvedPanels() const {
    return solved_panels_;
  }

 private:
  struct AreaIndicator {
    int area_id = -1;
    AreaPopup *popup = nullptr;
    int real_x1 = 0;
    int real_y1 = 0;
    int real_x2 = 0;
    int real_y2 = 0;
    bool active = true;
  };

  void OnPaint(wxPaintEvent &event);
  void OnMouseMove(wxMouseEvent &event);
  void OnRefreshSavedata(wxCommandEvent &event);

  void Redraw();

  void RefreshSavedata();

  wxImage map_image_;
  wxImage player_image_;
  wxBitmap rendered_;
  wxBitmap scaled_player_;

  int offset_x_ = 0;
  int offset_y_ = 0;
  double scale_x_ = 0;
  double scale_y_ = 0;

  std::vector<AreaIndicator> areas_;

  bool panels_mode_ = false;
  std::optional<std::string> savedata_path_;
  std::set<std::string> solved_panels_;
};

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