diff options
author | Star Rauchenberger <fefferburbia@gmail.com> | 2024-05-15 11:09:23 -0400 |
---|---|---|
committer | Star Rauchenberger <fefferburbia@gmail.com> | 2024-05-15 11:09:23 -0400 |
commit | a5a6c1b8b902c960f8204f8d814ce579dfd5fa50 (patch) | |
tree | bad31379c4a52496260377bfce8321ae2c2f8a3c /src | |
parent | f4354d64021d2c6833a59a1b64fb30f87d1175bc (diff) | |
download | lingo-ap-tracker-a5a6c1b8b902c960f8204f8d814ce579dfd5fa50.tar.gz lingo-ap-tracker-a5a6c1b8b902c960f8204f8d814ce579dfd5fa50.tar.bz2 lingo-ap-tracker-a5a6c1b8b902c960f8204f8d814ce579dfd5fa50.zip |
Hovering over a connection only shows nearest hops
Diffstat (limited to 'src')
-rw-r--r-- | src/network_set.cpp | 58 | ||||
-rw-r--r-- | src/network_set.h | 7 | ||||
-rw-r--r-- | src/subway_map.cpp | 3 |
3 files changed, 13 insertions, 55 deletions
diff --git a/src/network_set.cpp b/src/network_set.cpp index 3238dcd..6d2a098 100644 --- a/src/network_set.cpp +++ b/src/network_set.cpp | |||
@@ -1,68 +1,30 @@ | |||
1 | #include "network_set.h" | 1 | #include "network_set.h" |
2 | 2 | ||
3 | void NetworkSet::Clear() { | 3 | void NetworkSet::Clear() { |
4 | networks_.clear(); | ||
5 | network_by_item_.clear(); | 4 | network_by_item_.clear(); |
6 | } | 5 | } |
7 | 6 | ||
8 | int NetworkSet::AddLink(int id1, int id2) { | 7 | void NetworkSet::AddLink(int id1, int id2) { |
9 | if (id2 > id1) { | 8 | if (id2 > id1) { |
10 | // Make sure id1 < id2 | 9 | // Make sure id1 < id2 |
11 | std::swap(id1, id2); | 10 | std::swap(id1, id2); |
12 | } | 11 | } |
13 | 12 | ||
14 | if (network_by_item_.count(id1)) { | 13 | if (!network_by_item_.count(id1)) { |
15 | if (network_by_item_.count(id2)) { | 14 | network_by_item_[id1] = {}; |
16 | int network_id1 = network_by_item_[id1]; | ||
17 | int network_id2 = network_by_item_[id2]; | ||
18 | |||
19 | networks_[network_id1].emplace(id1, id2); | ||
20 | |||
21 | if (network_id1 != network_id2) { | ||
22 | for (const auto& [other_id1, other_id2] : networks_[network_id2]) { | ||
23 | network_by_item_[other_id1] = network_id1; | ||
24 | network_by_item_[other_id2] = network_id1; | ||
25 | } | ||
26 | |||
27 | networks_[network_id1].merge(networks_[network_id2]); | ||
28 | networks_[network_id2].clear(); | ||
29 | } | ||
30 | |||
31 | return network_id1; | ||
32 | } else { | ||
33 | int network_id = network_by_item_[id1]; | ||
34 | network_by_item_[id2] = network_id; | ||
35 | networks_[network_id].emplace(id1, id2); | ||
36 | |||
37 | return network_id; | ||
38 | } | ||
39 | } else { | ||
40 | if (network_by_item_.count(id2)) { | ||
41 | int network_id = network_by_item_[id2]; | ||
42 | network_by_item_[id1] = network_id; | ||
43 | networks_[network_id].emplace(id1, id2); | ||
44 | |||
45 | return network_id; | ||
46 | } else { | ||
47 | int network_id = networks_.size(); | ||
48 | network_by_item_[id1] = network_id; | ||
49 | network_by_item_[id2] = network_id; | ||
50 | networks_.emplace_back(); | ||
51 | networks_[network_id] = {{id1, id2}}; | ||
52 | |||
53 | return network_id; | ||
54 | } | ||
55 | } | 15 | } |
16 | if (!network_by_item_.count(id2)) { | ||
17 | network_by_item_[id2] = {}; | ||
18 | } | ||
19 | |||
20 | network_by_item_[id1].insert({id1, id2}); | ||
21 | network_by_item_[id2].insert({id1, id2}); | ||
56 | } | 22 | } |
57 | 23 | ||
58 | bool NetworkSet::IsItemInNetwork(int id) const { | 24 | bool NetworkSet::IsItemInNetwork(int id) const { |
59 | return network_by_item_.count(id); | 25 | return network_by_item_.count(id); |
60 | } | 26 | } |
61 | 27 | ||
62 | int NetworkSet::GetNetworkWithItem(int id) const { | ||
63 | return network_by_item_.at(id); | ||
64 | } | ||
65 | |||
66 | const std::set<std::pair<int, int>>& NetworkSet::GetNetworkGraph(int id) const { | 28 | const std::set<std::pair<int, int>>& NetworkSet::GetNetworkGraph(int id) const { |
67 | return networks_.at(id); | 29 | return network_by_item_.at(id); |
68 | } | 30 | } |
diff --git a/src/network_set.h b/src/network_set.h index e0ef043..e6f0c07 100644 --- a/src/network_set.h +++ b/src/network_set.h | |||
@@ -11,18 +11,15 @@ class NetworkSet { | |||
11 | public: | 11 | public: |
12 | void Clear(); | 12 | void Clear(); |
13 | 13 | ||
14 | int AddLink(int id1, int id2); | 14 | void AddLink(int id1, int id2); |
15 | 15 | ||
16 | bool IsItemInNetwork(int id) const; | 16 | bool IsItemInNetwork(int id) const; |
17 | 17 | ||
18 | int GetNetworkWithItem(int id) const; | ||
19 | |||
20 | const std::set<std::pair<int, int>>& GetNetworkGraph(int id) const; | 18 | const std::set<std::pair<int, int>>& GetNetworkGraph(int id) const; |
21 | 19 | ||
22 | private: | 20 | private: |
23 | 21 | ||
24 | std::vector<std::set<std::pair<int, int>>> networks_; | 22 | std::map<int, std::set<std::pair<int, int>>> network_by_item_; |
25 | std::map<int, int> network_by_item_; | ||
26 | }; | 23 | }; |
27 | 24 | ||
28 | #endif /* end of include guard: NETWORK_SET_H_3036B8E3 */ | 25 | #endif /* end of include guard: NETWORK_SET_H_3036B8E3 */ |
diff --git a/src/subway_map.cpp b/src/subway_map.cpp index d331b7d..99638aa 100644 --- a/src/subway_map.cpp +++ b/src/subway_map.cpp | |||
@@ -112,9 +112,8 @@ void SubwayMap::OnPaint(wxPaintEvent &event) { | |||
112 | if (hovered_item_ && networks_.IsItemInNetwork(*hovered_item_)) { | 112 | if (hovered_item_ && networks_.IsItemInNetwork(*hovered_item_)) { |
113 | dc.SetBrush(*wxTRANSPARENT_BRUSH); | 113 | dc.SetBrush(*wxTRANSPARENT_BRUSH); |
114 | 114 | ||
115 | int network_id = networks_.GetNetworkWithItem(*hovered_item_); | ||
116 | for (const auto &[item_id1, item_id2] : | 115 | for (const auto &[item_id1, item_id2] : |
117 | networks_.GetNetworkGraph(network_id)) { | 116 | networks_.GetNetworkGraph(*hovered_item_)) { |
118 | const SubwayItem &item1 = GD_GetSubwayItem(item_id1); | 117 | const SubwayItem &item1 = GD_GetSubwayItem(item_id1); |
119 | const SubwayItem &item2 = GD_GetSubwayItem(item_id2); | 118 | const SubwayItem &item2 = GD_GetSubwayItem(item_id2); |
120 | 119 | ||