starmath/inc/ElementsDockingWindow.hxx    |    6 +--
 starmath/source/ElementsDockingWindow.cxx |   56 ++++++++++++------------------
 starmath/source/SmElementsPanel.cxx       |   22 ++++-------
 3 files changed, 34 insertions(+), 50 deletions(-)

New commits:
commit 9a48563e33e54a04932ebf0ef195e7a0d2d1aa67
Author:     Caolán McNamara <[email protected]>
AuthorDate: Sat Jun 18 15:45:21 2022 +0100
Commit:     Caolán McNamara <[email protected]>
CommitDate: Sat Jun 18 18:05:31 2022 +0200

    cid#1504663 workaround Resource leak in object
    
    and
    
    cid#1504667 Resource leak in object
    
    take a simpler approach over an unordered_map
    
    Change-Id: Ie0736dcb0c8e7cdcd3b4b6bd303642841b590bf9
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/136087
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <[email protected]>

diff --git a/starmath/inc/ElementsDockingWindow.hxx 
b/starmath/inc/ElementsDockingWindow.hxx
index 5d6a0bd3dfc7..70ee4fafddc2 100644
--- a/starmath/inc/ElementsDockingWindow.hxx
+++ b/starmath/inc/ElementsDockingWindow.hxx
@@ -40,7 +40,7 @@ class SmElementsControl
 
     SmDocShell*   mpDocShell;
     SmFormat      maFormat;
-    TranslateId   msCurrentSetId;
+    size_t        mnCurrentSetIndex;
     sal_uInt16    m_nSmSyntaxVersion;
 
     bool          mbVerticalMode;
@@ -50,7 +50,7 @@ class SmElementsControl
     Link<OUString, void> maSelectHdlLink;
 
     void addElement(const OUString& aElementVisual, const OUString& 
aElementSource, const OUString& aHelpText);
-    void addElements(const TranslateId& rCategory);
+    void addElements(size_t nCategory);
 
     void build();
 
@@ -66,7 +66,7 @@ public:
     ~SmElementsControl();
 
     static const std::vector<TranslateId>& categories();
-    void setElementSetId(TranslateId pSetId);
+    void setElementSetIndex(size_t nSetIndex);
 
     void setVerticalMode(bool bVertical);
 
diff --git a/starmath/source/ElementsDockingWindow.cxx 
b/starmath/source/ElementsDockingWindow.cxx
index aab82cac3f11..4ded72c08f2c 100644
--- a/starmath/source/ElementsDockingWindow.cxx
+++ b/starmath/source/ElementsDockingWindow.cxx
@@ -431,23 +431,19 @@ constexpr std::pair<const SmElementDescr*, size_t> 
asPair(const SmElementDescr (
     return { category, N };
 }
 
-struct TranslateId_hash
-{
-    size_t operator()(const TranslateId& val) const { return 
std::hash<std::string_view>()(val.mpId); }
+const std::vector<std::pair<const SmElementDescr*, size_t>> 
s_a5CategoryDescriptions{
+    { asPair(s_a5UnaryBinaryOperatorsList) },
+    { asPair(s_a5RelationsList) },
+    { asPair(s_a5SetOperationsList) },
+    { asPair(s_a5FunctionsList) },
+    { asPair(s_a5OperatorsList) },
+    { asPair(s_a5AttributesList) },
+    { asPair(s_a5BracketsList) },
+    { asPair(s_a5FormatsList) },
+    { asPair(s_a5OthersList) },
+    { asPair(s_a5ExamplesList) },
 };
 
-const std::unordered_map<TranslateId, std::pair<const SmElementDescr*, 
size_t>, TranslateId_hash> s_a5CategoryDescriptions{
-    { RID_CATEGORY_UNARY_BINARY_OPERATORS, 
asPair(s_a5UnaryBinaryOperatorsList) },
-    { RID_CATEGORY_RELATIONS, asPair(s_a5RelationsList) },
-    { RID_CATEGORY_SET_OPERATIONS, asPair(s_a5SetOperationsList) },
-    { RID_CATEGORY_FUNCTIONS, asPair(s_a5FunctionsList) },
-    { RID_CATEGORY_OPERATORS, asPair(s_a5OperatorsList) },
-    { RID_CATEGORY_ATTRIBUTES, asPair(s_a5AttributesList) },
-    { RID_CATEGORY_BRACKETS, asPair(s_a5BracketsList) },
-    { RID_CATEGORY_FORMATS, asPair(s_a5FormatsList) },
-    { RID_CATEGORY_OTHERS, asPair(s_a5OthersList) },
-    { RID_CATEGORY_EXAMPLES, asPair(s_a5ExamplesList) },
-};
 } // namespace
 
 // static
@@ -544,22 +540,22 @@ OUString SmElementsControl::GetElementHelpText(const 
OUString& itemId)
     return weld::fromId<ElementData*>(itemId)->maHelpText;
 }
 
-void SmElementsControl::setElementSetId(TranslateId pSetId)
+void SmElementsControl::setElementSetIndex(size_t nSetIndex)
 {
-    if (msCurrentSetId == pSetId)
+    if (mnCurrentSetIndex == nSetIndex)
         return;
-    msCurrentSetId = pSetId;
+    mnCurrentSetIndex = nSetIndex;
     build();
 }
 
-void SmElementsControl::addElements(const TranslateId& rCategory)
+void SmElementsControl::addElements(size_t nCategory)
 {
     mpIconView->freeze();
     mpIconView->clear();
     mpIconView->set_item_width(0);
     maItemDatas.clear();
 
-    const auto& [aElementsArray, aElementsArraySize] = 
s_a5CategoryDescriptions.at(rCategory);
+    const auto& [aElementsArray, aElementsArraySize] = 
s_a5CategoryDescriptions[nCategory];
 
     for (size_t i = 0; i < aElementsArraySize; i++)
     {
@@ -588,7 +584,7 @@ void SmElementsControl::build()
     switch(m_nSmSyntaxVersion)
     {
         case 5:
-            addElements(msCurrentSetId);
+            addElements(mnCurrentSetIndex);
             break;
         case 6:
         default:
@@ -637,9 +633,9 @@ 
SmElementsDockingWindow::SmElementsDockingWindow(SfxBindings* pInputBindings, Sf
         mxElementListBox->append_text(SmResId(category));
 
     mxElementListBox->connect_changed(LINK(this, SmElementsDockingWindow, 
ElementSelectedHandle));
-    
mxElementListBox->set_active_text(SmResId(RID_CATEGORY_UNARY_BINARY_OPERATORS));
+    mxElementListBox->set_active(0);
 
-    mxElementsControl->setElementSetId(RID_CATEGORY_UNARY_BINARY_OPERATORS);
+    mxElementsControl->setElementSetIndex(0);
     mxElementsControl->SetSelectHdl(LINK(this, SmElementsDockingWindow, 
SelectClickHandler));
 }
 
@@ -698,16 +694,10 @@ IMPL_LINK(SmElementsDockingWindow, SelectClickHandler, 
OUString, sElementSource,
 
 IMPL_LINK( SmElementsDockingWindow, ElementSelectedHandle, weld::ComboBox&, 
rList, void)
 {
-    for (const auto& category : SmElementsControl::categories())
-    {
-        OUString aCurrentCategoryString = SmResId(category);
-        if (aCurrentCategoryString == rList.get_active_text())
-        {
-            mxElementsControl->setElementSetId(category);
-            setSmSyntaxVersion(GetView()->GetDoc()->GetSmSyntaxVersion());
-            return;
-        }
-    }
+    const int nActive = rList.get_active();
+    assert(nActive != -1);
+    mxElementsControl->setElementSetIndex(nActive);
+    setSmSyntaxVersion(GetView()->GetDoc()->GetSmSyntaxVersion());
 }
 
 SmViewShell* SmElementsDockingWindow::GetView()
diff --git a/starmath/source/SmElementsPanel.cxx 
b/starmath/source/SmElementsPanel.cxx
index 165e950ead5a..432e58d0e707 100644
--- a/starmath/source/SmElementsPanel.cxx
+++ b/starmath/source/SmElementsPanel.cxx
@@ -49,9 +49,9 @@ SmElementsPanel::SmElementsPanel(weld::Widget& rParent, const 
SfxBindings& rBind
     mxCategoryList->set_size_request(-1, mxCategoryList->get_height_rows(6));
 
     mxCategoryList->connect_changed(LINK(this, SmElementsPanel, 
CategorySelectedHandle));
-    mxCategoryList->select_text(SmResId(RID_CATEGORY_UNARY_BINARY_OPERATORS));
+    mxCategoryList->select(0);
 
-    mxElementsControl->setElementSetId(RID_CATEGORY_UNARY_BINARY_OPERATORS);
+    mxElementsControl->setElementSetIndex(0);
     mxElementsControl->SetSelectHdl(LINK(this, SmElementsPanel, 
ElementClickHandler));
 }
 
@@ -63,18 +63,12 @@ SmElementsPanel::~SmElementsPanel()
 
 IMPL_LINK(SmElementsPanel, CategorySelectedHandle, weld::TreeView&, rList, 
void)
 {
-    const OUString sSelected = rList.get_selected_text();
-    for (const auto& rCategoryId : SmElementsControl::categories())
-    {
-        OUString aCurrentCategoryString = SmResId(rCategoryId);
-        if (aCurrentCategoryString == sSelected)
-        {
-            mxElementsControl->setElementSetId(rCategoryId);
-            if (SmViewShell* pViewSh = GetView())
-                
mxElementsControl->setSmSyntaxVersion(pViewSh->GetDoc()->GetSmSyntaxVersion());
-            return;
-        }
-    }
+    const int nActive = rList.get_selected_index();
+    if (nActive == -1)
+        return;
+    mxElementsControl->setElementSetIndex(nActive);
+    if (SmViewShell* pViewSh = GetView())
+        
mxElementsControl->setSmSyntaxVersion(pViewSh->GetDoc()->GetSmSyntaxVersion());
 }
 
 IMPL_LINK(SmElementsPanel, ElementClickHandler, OUString, ElementSource, void)

Reply via email to