summaryrefslogtreecommitdiff
path: root/freefilesync/debian/patches/revert_zenju_aggressive_upstreamisms.patch
blob: 8ca60c20d7216465cd7bd10bfe836a88998bdbe6 (plain)
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
diff -x '*.rej' -x '*.orig' -x '*.git*' -Naur 10.24-0/wx+/choice_enum.h 10.24-1/wx+/choice_enum.h
--- 10.24-0/wx+/choice_enum.h	2020-05-17 18:30:59.441499418 -0400
+++ 10.24-1/wx+/choice_enum.h	2020-05-17 18:53:59.893685507 -0400
@@ -7,7 +7,6 @@
 #ifndef CHOICE_ENUM_H_132413545345687
 #define CHOICE_ENUM_H_132413545345687
 
-#include <unordered_map>
 #include <vector>
 #include <wx/choice.h>
 
@@ -44,11 +43,8 @@
         descrList.push_back({ value, { text, tooltip } });
         return *this;
     }
-
     using DescrList = std::vector<std::pair<Enum, std::pair<wxString, wxString>>>;
     DescrList descrList;
-
-    std::unordered_map<const wxChoice*, std::vector<wxString>> itemsSetLast;
 };
 template <class Enum> void setEnumVal(const EnumDescrList<Enum>& mapping, wxChoice& ctrl, Enum value);
 template <class Enum> Enum getEnumVal(const EnumDescrList<Enum>& mapping, const wxChoice& ctrl);
@@ -69,34 +65,26 @@
 
 //--------------- impelementation -------------------------------------------
 template <class Enum>
-void setEnumVal(EnumDescrList<Enum>& mapping, wxChoice& ctrl, Enum value)
+void setEnumVal(const EnumDescrList<Enum>& mapping, wxChoice& ctrl, Enum value)
 {
-    auto& itemsSetLast = mapping.itemsSetLast[&ctrl];
+    ctrl.Clear();
 
-    std::vector<wxString> items;
+    int selectedPos = 0;
     for (auto it = mapping.descrList.begin(); it != mapping.descrList.end(); ++it)
-        items.push_back(it->second.first);
-
-    if (items != itemsSetLast)
     {
-        ctrl.Set(items); //expensive as fuck! => only call when absolutely needed!
-        itemsSetLast = std::move(items);
+        ctrl.Append(it->second.first);
+        if (it->first == value)
+        {
+            selectedPos = it - mapping.descrList.begin();
+
+            if (it->second.second.empty())
+                ctrl.UnsetToolTip();
+            else
+                ctrl.SetToolTip(it->second.second);
+        }
     }
-    //-----------------------------------------------------------------
-
-    const auto it = std::find_if(mapping.descrList.begin(), mapping.descrList.end(), [&](const auto& mapItem) { return mapItem.first == value; });
-    if (it != mapping.descrList.end())
-    {
-        if (const wxString& tooltip = it->second.second;
-            !tooltip.empty())
-            ctrl.SetToolTip(tooltip);
-        else
-            ctrl.UnsetToolTip();
 
-        const int selectedPos = it - mapping.descrList.begin();
-        ctrl.SetSelection(selectedPos);
-    }
-    else assert(false);
+    ctrl.SetSelection(selectedPos);
 }
 
 template <class Enum>
@@ -115,17 +103,11 @@
 
 template <class Enum> void updateTooltipEnumVal(const EnumDescrList<Enum>& mapping, wxChoice& ctrl)
 {
-    const int selectedPos = ctrl.GetSelection();
+    const Enum currentValue = getEnumVal(mapping, ctrl);
 
-    if (0 <= selectedPos && selectedPos < static_cast<int>(mapping.descrList.size()))
-    {
-        if (const auto& [text, tooltip] = mapping.descrList[selectedPos].second;
-            !tooltip.empty())
-            ctrl.SetToolTip(tooltip);
-        else
-            ctrl.UnsetToolTip();
-    }
-    else assert(false);
+    for (const auto& [enumValue, textAndTooltip] : mapping.descrList)
+        if (currentValue == enumValue)
+            ctrl.SetToolTip(textAndTooltip.second);
 }
 }
 
bgstack15