formula/source/ui/dlg/funcpage.cxx | 23 +++++++++++++++++++++++ formula/source/ui/dlg/funcpage.hxx | 2 ++ formula/uiconfig/ui/functionpage.ui | 15 +++++++++++++++ sc/source/ui/formdlg/dwfunctr.cxx | 34 ++++++++++++++++++++++++++++++++++ sc/source/ui/inc/dwfunctr.hxx | 2 ++ sc/uiconfig/scalc/ui/functionpanel.ui | 17 ++++++++++++++++- 6 files changed, 92 insertions(+), 1 deletion(-)
New commits: commit f5685bdfff370be57cf37f1dc746026c6bfd6113 Author: AhmedHamed <ahmedhamed3...@gmail.com> AuthorDate: Tue Jul 9 10:28:02 2024 +0300 Commit: Andreas Heinisch <andreas.heini...@yahoo.de> CommitDate: Fri Jul 12 10:51:50 2024 +0200 tdf#161534 Add a Help button in FD & FW to open respective Help documentation Change-Id: I35f5965401e970e02fa196f767bbd08d00de424f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/170181 Reviewed-by: Andreas Heinisch <andreas.heini...@yahoo.de> Reviewed-by: Heiko Tietze <heiko.tie...@documentfoundation.org> Tested-by: Jenkins diff --git a/formula/source/ui/dlg/funcpage.cxx b/formula/source/ui/dlg/funcpage.cxx index d0a26fd2c2f5..c66e5f0cfb36 100644 --- a/formula/source/ui/dlg/funcpage.cxx +++ b/formula/source/ui/dlg/funcpage.cxx @@ -19,6 +19,7 @@ #include <vcl/event.hxx> #include <vcl/svapp.hxx> +#include <vcl/help.hxx> #include <formula/IFunctionDescription.hxx> #include "funcpage.hxx" @@ -46,6 +47,7 @@ FuncPage::FuncPage(weld::Container* pParent, const IFunctionManager* _pFunctionM , m_xLbCategory(m_xBuilder->weld_combo_box(u"category"_ustr)) , m_xLbFunction(m_xBuilder->weld_tree_view(u"function"_ustr)) , m_xLbFunctionSearchString(m_xBuilder->weld_entry(u"search"_ustr)) + , m_xHelpButton(m_xBuilder->weld_button(u"help"_ustr)) , m_pFunctionManager(_pFunctionManager) { m_xLbFunction->make_sorted(); @@ -73,7 +75,9 @@ FuncPage::FuncPage(weld::Container* pParent, const IFunctionManager* _pFunctionM m_xLbFunction->connect_row_activated(LINK(this, FuncPage, DblClkHdl)); m_xLbFunction->connect_key_press(LINK(this, FuncPage, KeyInputHdl)); m_xLbFunctionSearchString->connect_changed(LINK(this, FuncPage, ModifyHdl)); + m_xHelpButton->connect_clicked(LINK(this, FuncPage, SelHelpClickHdl)); + m_xHelpButton->set_sensitive(false); m_xLbFunctionSearchString->grab_focus(); } @@ -193,6 +197,7 @@ IMPL_LINK_NOARG(FuncPage, SelComboBoxHdl, weld::ComboBox&, void) OUString searchStr = m_xLbFunctionSearchString->get_text(); m_xLbFunction->set_help_id(m_aHelpId); UpdateFunctionList(searchStr); + m_xHelpButton->set_sensitive(false); } IMPL_LINK_NOARG(FuncPage, SelTreeViewHdl, weld::TreeView&, void) @@ -204,6 +209,8 @@ IMPL_LINK_NOARG(FuncPage, SelTreeViewHdl, weld::TreeView&, void) if (!sHelpId.isEmpty()) m_xLbFunction->set_help_id(sHelpId); } + bool bSensitivity = weld::fromId<const IFunctionDescription*>(m_xLbFunction->get_selected_id()); + m_xHelpButton->set_sensitive(bSensitivity); aSelectionLink.Call(*this); } @@ -221,6 +228,22 @@ IMPL_LINK_NOARG(FuncPage, ModifyHdl, weld::Entry&, void) UpdateFunctionList(searchStr); } +IMPL_LINK_NOARG(FuncPage, SelHelpClickHdl, weld::Button&, void) +{ + if (const auto pDesc + = weld::fromId<const IFunctionDescription*>(m_xLbFunction->get_selected_id())) + { + if (Help* pHelp = Application::GetHelp()) + { + const OUString& sHelpId = pDesc->getHelpId(); + if (!sHelpId.isEmpty()) + { + pHelp->Start(sHelpId); + } + } + } +} + void FuncPage::SetCategory(sal_Int32 nCat) { // tdf#104487 - remember last used function category diff --git a/formula/source/ui/dlg/funcpage.hxx b/formula/source/ui/dlg/funcpage.hxx index e7ca248d861b..45d5d19b75f9 100644 --- a/formula/source/ui/dlg/funcpage.hxx +++ b/formula/source/ui/dlg/funcpage.hxx @@ -40,6 +40,7 @@ private: std::unique_ptr<weld::ComboBox> m_xLbCategory; std::unique_ptr<weld::TreeView> m_xLbFunction; std::unique_ptr<weld::Entry> m_xLbFunctionSearchString; + std::unique_ptr<weld::Button> m_xHelpButton; Link<FuncPage&,void> aDoubleClickLink; Link<FuncPage&,void> aSelectionLink; @@ -58,6 +59,7 @@ private: DECL_LINK(DblClkHdl, weld::TreeView&, bool); DECL_LINK(KeyInputHdl, const KeyEvent&, bool); DECL_LINK(ModifyHdl, weld::Entry&, void); + DECL_LINK(SelHelpClickHdl, weld::Button&, void); void UpdateFunctionList(const OUString&); diff --git a/formula/uiconfig/ui/functionpage.ui b/formula/uiconfig/ui/functionpage.ui index 65a383ec6f1d..aa1e2ce08e3b 100644 --- a/formula/uiconfig/ui/functionpage.ui +++ b/formula/uiconfig/ui/functionpage.ui @@ -150,6 +150,21 @@ <property name="position">5</property> </packing> </child> + <child> + <object class="GtkButton" id="help"> + <property name="label">Help</property> + <property name="visible">True</property> + <property name="can-focus">True</property> + <property name="can-default">True</property> + <property name="receives-default">True</property> + <property name="tooltip-text" translatable="yes" context="functionpage|help|tooltip_text">Go to Function's Help Page</property> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">6</property> + </packing> + </child> <child internal-child="accessible"> <object class="AtkObject" id="FunctionPage-atkobject"> <property name="AtkObject::accessible-description" translatable="yes" context="functionpage|extended_tip|FunctionPage">Opens the Function Wizard, which helps you to interactively create formulas.</property> diff --git a/sc/source/ui/formdlg/dwfunctr.cxx b/sc/source/ui/formdlg/dwfunctr.cxx index 504703f3b478..db5adc7b71d0 100644 --- a/sc/source/ui/formdlg/dwfunctr.cxx +++ b/sc/source/ui/formdlg/dwfunctr.cxx @@ -22,6 +22,8 @@ #include <sfx2/viewsh.hxx> #include <formula/funcvarargs.h> #include <unotools/charclass.hxx> +#include <vcl/svapp.hxx> +#include <vcl/help.hxx> #include <global.hxx> #include <scmod.hxx> @@ -50,6 +52,7 @@ ScFunctionWin::ScFunctionWin(weld::Widget* pParent) , xCatBox(m_xBuilder->weld_combo_box(u"category"_ustr)) , xFuncList(m_xBuilder->weld_tree_view(u"funclist"_ustr)) , xInsertButton(m_xBuilder->weld_button(u"insert"_ustr)) + , xHelpButton(m_xBuilder->weld_button(u"help"_ustr)) , xFiFuncDesc(m_xBuilder->weld_text_view(u"funcdesc"_ustr)) , m_xSearchString(m_xBuilder->weld_entry(u"search"_ustr)) , xConfigListener(new comphelper::ConfigurationListener(u"/org.openoffice.Office.Calc/Formula/Syntax"_ustr)) @@ -73,6 +76,7 @@ ScFunctionWin::ScFunctionWin(weld::Widget* pParent) xFuncList->connect_row_activated(LINK( this, ScFunctionWin, SetRowActivatedHdl)); xInsertButton->connect_clicked(LINK( this, ScFunctionWin, SetSelectionClickHdl)); + xHelpButton->connect_clicked(LINK( this, ScFunctionWin, SetHelpClickHdl)); xCatBox->set_active(0); @@ -102,6 +106,7 @@ ScFunctionWin::~ScFunctionWin() xCatBox.reset(); xFuncList.reset(); xInsertButton.reset(); + xHelpButton.reset(); xFiFuncDesc.reset(); } @@ -527,6 +532,35 @@ IMPL_LINK_NOARG( ScFunctionWin, SetSelectionClickHdl, weld::Button&, void ) DoEnter(); // saves the input } +/************************************************************************* +#* Handle: SetHelpClickHdl +#*------------------------------------------------------------------------ +#* +#* Class: ScFunctionWin +#* +#* Function: Get selected function's offical help. +#* +#* Input: --- +#* +#* Output: --- +#* +#************************************************************************/ + +IMPL_LINK_NOARG( ScFunctionWin, SetHelpClickHdl, weld::Button&, void ) +{ + if (const auto pDesc = weld::fromId<const ScFuncDesc*>(xFuncList->get_selected_id())) + { + if (Help* pHelp = Application::GetHelp()) + { + const OUString& sHelpId = pDesc->getHelpId(); + if (!sHelpId.isEmpty()) + { + pHelp->Start(sHelpId); + } + } + } +} + IMPL_LINK_NOARG( ScFunctionWin, SetRowActivatedHdl, weld::TreeView&, bool ) { DoEnter(); // saves the input diff --git a/sc/source/ui/inc/dwfunctr.hxx b/sc/source/ui/inc/dwfunctr.hxx index fb93643539bc..cc854fa317a1 100644 --- a/sc/source/ui/inc/dwfunctr.hxx +++ b/sc/source/ui/inc/dwfunctr.hxx @@ -46,6 +46,7 @@ private: std::unique_ptr<weld::ComboBox> xCatBox; std::unique_ptr<weld::TreeView> xFuncList; std::unique_ptr<weld::Button> xInsertButton; + std::unique_ptr<weld::Button> xHelpButton; std::unique_ptr<weld::TextView> xFiFuncDesc; std::unique_ptr<weld::Entry> m_xSearchString; @@ -64,6 +65,7 @@ private: DECL_LINK( SetRowActivatedHdl, weld::TreeView&, bool ); DECL_LINK( SetSelectionClickHdl, weld::Button&, void ); + DECL_LINK( SetHelpClickHdl, weld::Button&, void ); DECL_LINK( SelComboHdl, weld::ComboBox&, void ); DECL_LINK( SelTreeHdl, weld::TreeView&, void ); DECL_LINK( ModifyHdl, weld::Entry&, void ); diff --git a/sc/uiconfig/scalc/ui/functionpanel.ui b/sc/uiconfig/scalc/ui/functionpanel.ui index 72c9cedbbcae..f67bd55a352d 100644 --- a/sc/uiconfig/scalc/ui/functionpanel.ui +++ b/sc/uiconfig/scalc/ui/functionpanel.ui @@ -39,7 +39,7 @@ <property name="vexpand">True</property> <property name="row-spacing">6</property> <child> - <!-- n-columns=2 n-rows=1 --> + <!-- n-columns=3 n-rows=1 --> <object class="GtkGrid"> <property name="visible">True</property> <property name="can-focus">False</property> @@ -199,6 +199,21 @@ <property name="top-attach">1</property> </packing> </child> + <child> + <object class="GtkButton" id="help"> + <property name="label">Help</property> + <property name="visible">True</property> + <property name="can-focus">True</property> + <property name="can-default">True</property> + <property name="receives-default">True</property> + <property name="tooltip-text" translatable="yes" context="functionpanel|help|tooltip_text">Go to Function's Help Page</property> + <property name="halign">end</property> + </object> + <packing> + <property name="left-attach">0</property> + <property name="top-attach">2</property> + </packing> + </child> </object> <packing> <property name="left-attach">0</property>