starmath/inc/ElementsDockingWindow.hxx | 7 +-- starmath/source/ElementsDockingWindow.cxx | 59 +++++++++++++----------------- starmath/source/SmElementsPanel.cxx | 22 ++++------- 3 files changed, 37 insertions(+), 51 deletions(-)
New commits: commit 99ef79af1f003fb37a8481ae629f847f40b2ba7f Author: Caolán McNamara <[email protected]> AuthorDate: Sun Jun 19 12:38:51 2022 +0100 Commit: Mike Kaganski <[email protected]> CommitDate: Fri Aug 19 15:34:44 2022 +0200 cid#1506514 Uninitialized scalar field Change-Id: I777d9008289b2afb464d1002e8be32072c0a4501 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/136099 Tested-by: Jenkins Reviewed-by: Caolán McNamara <[email protected]> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/138507 Tested-by: Jenkins CollaboraOffice <[email protected]> Reviewed-by: Mike Kaganski <[email protected]> diff --git a/starmath/inc/ElementsDockingWindow.hxx b/starmath/inc/ElementsDockingWindow.hxx index 343f7f75818c..e2c19aa8c6c3 100644 --- a/starmath/inc/ElementsDockingWindow.hxx +++ b/starmath/inc/ElementsDockingWindow.hxx @@ -39,7 +39,7 @@ class SmElementsControl SmDocShell* mpDocShell; SmFormat maFormat; - size_t mnCurrentSetIndex; + int mnCurrentSetIndex; sal_uInt16 m_nSmSyntaxVersion; bool mbVerticalMode; @@ -49,7 +49,7 @@ class SmElementsControl Link<OUString, void> maSelectHdlLink; void addElement(const OUString& aElementVisual, const OUString& aElementSource, const OUString& aHelpText); - void addElements(size_t nCategory); + void addElements(int nCategory); void build(); @@ -65,7 +65,7 @@ public: ~SmElementsControl(); static const std::vector<TranslateId>& categories(); - void setElementSetIndex(size_t nSetIndex); + void setElementSetIndex(int nSetIndex); void setVerticalMode(bool bVertical); diff --git a/starmath/source/ElementsDockingWindow.cxx b/starmath/source/ElementsDockingWindow.cxx index 23bd026cd080..5187f68f3843 100644 --- a/starmath/source/ElementsDockingWindow.cxx +++ b/starmath/source/ElementsDockingWindow.cxx @@ -453,6 +453,7 @@ const std::vector<TranslateId>& SmElementsControl::categories() SmElementsControl::SmElementsControl(std::unique_ptr<weld::IconView> pIconView) : mpDocShell(new SmDocShell(SfxModelFlags::EMBEDDED_OBJECT)) + , mnCurrentSetIndex(-1) , m_nSmSyntaxVersion(SM_MOD()->GetConfig()->GetDefaultSmSyntaxVersion()) , mbVerticalMode(true) , mpIconView(std::move(pIconView)) @@ -539,7 +540,7 @@ OUString SmElementsControl::GetElementHelpText(const OUString& itemId) return reinterpret_cast<ElementData*>(itemId.toUInt64())->maHelpText; } -void SmElementsControl::setElementSetIndex(size_t nSetIndex) +void SmElementsControl::setElementSetIndex(int nSetIndex) { if (mnCurrentSetIndex == nSetIndex) return; @@ -547,13 +548,15 @@ void SmElementsControl::setElementSetIndex(size_t nSetIndex) build(); } -void SmElementsControl::addElements(size_t nCategory) +void SmElementsControl::addElements(int nCategory) { mpIconView->freeze(); mpIconView->clear(); mpIconView->set_item_width(0); maItemDatas.clear(); + assert(nCategory >= 0 && o3tl::make_unsigned(nCategory) < s_a5CategoryDescriptions.size()); + const auto& [aElementsArray, aElementsArraySize] = s_a5CategoryDescriptions[nCategory]; for (size_t i = 0; i < aElementsArraySize; i++) commit 3f6ad8a0da341205cf6f253500ee334f50da790e Author: Caolán McNamara <[email protected]> AuthorDate: Sat Jun 18 15:45:21 2022 +0100 Commit: Mike Kaganski <[email protected]> CommitDate: Fri Aug 19 15:34:30 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]> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/138506 Tested-by: Jenkins CollaboraOffice <[email protected]> Reviewed-by: Mike Kaganski <[email protected]> diff --git a/starmath/inc/ElementsDockingWindow.hxx b/starmath/inc/ElementsDockingWindow.hxx index 5a6c1518d59e..343f7f75818c 100644 --- a/starmath/inc/ElementsDockingWindow.hxx +++ b/starmath/inc/ElementsDockingWindow.hxx @@ -39,7 +39,7 @@ class SmElementsControl SmDocShell* mpDocShell; SmFormat maFormat; - TranslateId msCurrentSetId; + size_t mnCurrentSetIndex; sal_uInt16 m_nSmSyntaxVersion; bool mbVerticalMode; @@ -49,7 +49,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(); @@ -65,8 +65,7 @@ public: ~SmElementsControl(); static const std::vector<TranslateId>& categories(); - const TranslateId& elementSetId() const { return msCurrentSetId; } - 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 14fccfbf4b30..23bd026cd080 100644 --- a/starmath/source/ElementsDockingWindow.cxx +++ b/starmath/source/ElementsDockingWindow.cxx @@ -430,23 +430,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 @@ -543,22 +539,22 @@ OUString SmElementsControl::GetElementHelpText(const OUString& itemId) return reinterpret_cast<ElementData*>(itemId.toUInt64())->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++) { @@ -587,7 +583,7 @@ void SmElementsControl::build() switch(m_nSmSyntaxVersion) { case 5: - addElements(msCurrentSetId); + addElements(mnCurrentSetIndex); break; case 6: default: @@ -636,9 +632,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)); } @@ -697,16 +693,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)
