summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2022-06-18 15:45:21 +0100
committerCaolán McNamara <caolanm@redhat.com>2022-06-18 18:05:31 +0200
commit9a48563e33e54a04932ebf0ef195e7a0d2d1aa67 (patch)
tree5e09834d85995b62763a028b458c80c929e1f3a4
parenta5d355fef3896f3109c74c153f2a34b82fe6be38 (diff)
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 <caolanm@redhat.com>
-rw-r--r--starmath/inc/ElementsDockingWindow.hxx6
-rw-r--r--starmath/source/ElementsDockingWindow.cxx56
-rw-r--r--starmath/source/SmElementsPanel.cxx22
3 files changed, 34 insertions, 50 deletions
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)