diff options
author | Caolán McNamara <caolanm@redhat.com> | 2022-06-18 15:45:21 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2022-06-18 18:05:31 +0200 |
commit | 9a48563e33e54a04932ebf0ef195e7a0d2d1aa67 (patch) | |
tree | 5e09834d85995b62763a028b458c80c929e1f3a4 | |
parent | a5d355fef3896f3109c74c153f2a34b82fe6be38 (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.hxx | 6 | ||||
-rw-r--r-- | starmath/source/ElementsDockingWindow.cxx | 56 | ||||
-rw-r--r-- | starmath/source/SmElementsPanel.cxx | 22 |
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) |