diff options
Diffstat (limited to 'area_popup.cpp')
-rw-r--r-- | area_popup.cpp | 48 |
1 files changed, 31 insertions, 17 deletions
diff --git a/area_popup.cpp b/area_popup.cpp index 62cbe4d..e46e4ec 100644 --- a/area_popup.cpp +++ b/area_popup.cpp | |||
@@ -1,37 +1,51 @@ | |||
1 | #include "area_popup.h" | 1 | #include "area_popup.h" |
2 | 2 | ||
3 | #include "ap_state.h" | ||
3 | #include "game_data.h" | 4 | #include "game_data.h" |
4 | 5 | ||
5 | AreaPopup::AreaPopup(wxWindow* parent, int area_id) | 6 | AreaPopup::AreaPopup(wxWindow* parent, int area_id) |
6 | : wxPanel(parent, wxID_ANY), area_id_(area_id) { | 7 | : wxPanel(parent, wxID_ANY), area_id_(area_id) { |
7 | const MapArea& map_area = GetGameData().GetMapArea(area_id); | 8 | const MapArea& map_area = GetGameData().GetMapArea(area_id); |
8 | 9 | ||
9 | wxBoxSizer* list_sizer = new wxBoxSizer(wxVERTICAL); | 10 | wxFlexGridSizer* section_sizer = new wxFlexGridSizer(2, 10, 10); |
10 | 11 | ||
11 | wxStaticText* top_label = new wxStaticText(this, -1, map_area.name); | ||
12 | top_label->SetForegroundColour(*wxBLACK); | ||
13 | top_label->SetFont(top_label->GetFont().Bold()); | ||
14 | list_sizer->Add(top_label, wxSizerFlags().Center().DoubleBorder(wxDOWN)); | ||
15 | |||
16 | bool is_first = true; | ||
17 | for (const Location& location : map_area.locations) { | 12 | for (const Location& location : map_area.locations) { |
18 | wxSizerFlags sizer_flags = wxSizerFlags().Left(); | 13 | EyeIndicator* eye_indicator = new EyeIndicator(this); |
19 | if (!is_first) { | 14 | section_sizer->Add(eye_indicator, wxSizerFlags().Expand()); |
20 | sizer_flags = sizer_flags.Border(wxUP); | 15 | eye_indicators_.push_back(eye_indicator); |
21 | } | ||
22 | 16 | ||
23 | wxStaticText* section_label = new wxStaticText(this, -1, location.name); | 17 | wxStaticText* section_label = new wxStaticText(this, -1, location.name); |
24 | section_label->SetForegroundColour(*wxBLACK); | 18 | section_label->SetForegroundColour(*wxWHITE); |
25 | list_sizer->Add(section_label, sizer_flags); | 19 | section_sizer->Add( |
26 | 20 | section_label, | |
27 | is_first = false; | 21 | wxSizerFlags().Align(wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL)); |
22 | section_labels_.push_back(section_label); | ||
28 | } | 23 | } |
29 | 24 | ||
30 | wxBoxSizer* top_sizer = new wxBoxSizer(wxVERTICAL); | 25 | wxBoxSizer* top_sizer = new wxBoxSizer(wxVERTICAL); |
31 | top_sizer->Add(list_sizer, wxSizerFlags().DoubleBorder(wxALL)); | 26 | |
27 | wxStaticText* top_label = new wxStaticText(this, -1, map_area.name); | ||
28 | top_label->SetForegroundColour(*wxWHITE); | ||
29 | top_label->SetFont(top_label->GetFont().Bold()); | ||
30 | top_sizer->Add(top_label, | ||
31 | wxSizerFlags().Center().DoubleBorder(wxUP | wxLEFT | wxRIGHT)); | ||
32 | |||
33 | top_sizer->Add(section_sizer, wxSizerFlags().DoubleBorder(wxALL).Expand()); | ||
32 | 34 | ||
33 | SetSizerAndFit(top_sizer); | 35 | SetSizerAndFit(top_sizer); |
34 | 36 | ||
35 | SetBackgroundColour(*wxLIGHT_GREY); | 37 | SetBackgroundColour(*wxBLACK); |
36 | Hide(); | 38 | Hide(); |
37 | } | 39 | } |
40 | |||
41 | void AreaPopup::UpdateIndicators() { | ||
42 | const MapArea& map_area = GetGameData().GetMapArea(area_id_); | ||
43 | for (int section_id = 0; section_id < map_area.locations.size(); | ||
44 | section_id++) { | ||
45 | bool checked = GetAPState().HasCheckedGameLocation(area_id_, section_id); | ||
46 | const wxColour* text_color = checked ? wxWHITE : wxGREEN; | ||
47 | |||
48 | section_labels_[section_id]->SetForegroundColour(*text_color); | ||
49 | eye_indicators_[section_id]->SetChecked(checked); | ||
50 | } | ||
51 | } | ||