summaryrefslogtreecommitdiff
path: root/cui
diff options
context:
space:
mode:
authorMaxim Monastirsky <momonasmon@gmail.com>2017-05-09 09:30:54 +0300
committerMaxim Monastirsky <momonasmon@gmail.com>2017-05-09 11:22:56 +0200
commite4d7511d7e49af14e3c8113bb1440e0eb04f40ad (patch)
treec86ef3f61cb1ae52c870cc493aba41e699f32271 /cui
parenta6be278801ed5f3f5462c40ff3284f48c378541b (diff)
tdf#106681 Styles category for the Add Commands dialog
Change-Id: I7332967863697d3ad68a533b9fc603de2fdc87ef Reviewed-on: https://gerrit.libreoffice.org/37422 Reviewed-by: Maxim Monastirsky <momonasmon@gmail.com> Tested-by: Maxim Monastirsky <momonasmon@gmail.com>
Diffstat (limited to 'cui')
-rw-r--r--cui/Library_cui.mk1
-rw-r--r--cui/source/customize/cfgutil.cxx586
-rw-r--r--cui/source/customize/eventdlg.cxx2
-rw-r--r--cui/source/customize/macropg.cxx2
-rw-r--r--cui/source/customize/selector.cxx1061
-rw-r--r--cui/source/dialogs/scriptdlg.cxx2
-rw-r--r--cui/source/factory/cuiexp.cxx2
-rw-r--r--cui/source/factory/dlgfact.cxx2
-rw-r--r--cui/source/inc/cfg.hxx2
-rw-r--r--cui/source/inc/cfgutil.hxx58
-rw-r--r--cui/source/inc/selector.hxx222
-rw-r--r--cui/uiconfig/ui/macroselectordialog.ui8
12 files changed, 461 insertions, 1487 deletions
diff --git a/cui/Library_cui.mk b/cui/Library_cui.mk
index 813bff0eba0c..7eb55fb05375 100644
--- a/cui/Library_cui.mk
+++ b/cui/Library_cui.mk
@@ -89,7 +89,6 @@ $(eval $(call gb_Library_add_exception_objects,cui,\
cui/source/customize/cfgutil \
cui/source/customize/eventdlg \
cui/source/customize/macropg \
- cui/source/customize/selector \
cui/source/dialogs/about \
cui/source/dialogs/colorpicker \
cui/source/dialogs/cuicharmap \
diff --git a/cui/source/customize/cfgutil.cxx b/cui/source/customize/cfgutil.cxx
index 8ca7a614b315..c6e310e6505c 100644
--- a/cui/source/customize/cfgutil.cxx
+++ b/cui/source/customize/cfgutil.cxx
@@ -18,6 +18,7 @@
*/
#include "cfgutil.hxx"
+#include "cfg.hxx"
#include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/container/XEnumerationAccess.hpp>
@@ -26,7 +27,6 @@
#include <com/sun/star/frame/ModuleManager.hpp>
#include <com/sun/star/frame/Desktop.hpp>
#include <com/sun/star/frame/theUICommandDescription.hpp>
-#include <com/sun/star/frame/XDispatchInformationProvider.hpp>
#include <com/sun/star/script/browse/XBrowseNode.hpp>
#include <com/sun/star/script/browse/BrowseNodeTypes.hpp>
#include <com/sun/star/script/browse/theBrowseNodeFactory.hpp>
@@ -60,6 +60,11 @@
#include "dialmgr.hxx"
#include <svl/stritem.hxx>
#include <vcl/builderfactory.hxx>
+#include <vcl/button.hxx>
+#include <vcl/commandinfoprovider.hxx>
+#include <vcl/fixed.hxx>
+#include <vcl/help.hxx>
+#include <vcl/vclmedit.hxx>
#include <o3tl/make_unique.hxx>
using namespace ::com::sun::star;
@@ -308,6 +313,27 @@ OUString SfxConfigFunctionListBox::GetSelectedScriptURI()
return OUString();
}
+OUString SfxConfigFunctionListBox::GetHelpText()
+{
+ SvTreeListEntry *pEntry = FirstSelected();
+ if ( pEntry )
+ {
+ SfxGroupInfo_Impl *pData = static_cast<SfxGroupInfo_Impl*>(pEntry->GetUserData());
+ if ( pData )
+ {
+ if ( pData->nKind == SfxCfgKind::FUNCTION_SLOT )
+ {
+ return Application::GetHelp()->GetHelpText( pData->sCommand, this );
+ }
+ else if ( pData->nKind == SfxCfgKind::FUNCTION_SCRIPT )
+ {
+ return pData->sHelpText;
+ }
+ }
+ }
+ return OUString();
+}
+
OUString SfxConfigFunctionListBox::GetCurCommand()
{
SvTreeListEntry *pEntry = FirstSelected();
@@ -371,7 +397,10 @@ SvxConfigGroupBoxResource_Impl::SvxConfigGroupBoxResource_Impl() :
SfxConfigGroupListBox::SfxConfigGroupListBox(vcl::Window* pParent, WinBits nStyle)
: SvTreeListBox(pParent, nStyle)
- , xImp(new SvxConfigGroupBoxResource_Impl()), pFunctionListBox(nullptr), pStylesInfo(nullptr)
+ , xImp(new SvxConfigGroupBoxResource_Impl())
+ , pFunctionListBox(nullptr)
+ , m_pImageProvider(nullptr)
+ , pStylesInfo(nullptr)
{
SetStyle( GetStyle() | WB_CLIPCHILDREN | WB_HSCROLL | WB_HASBUTTONS | WB_HASLINES | WB_HASLINESATROOT | WB_HASBUTTONSATROOT );
SetNodeBitmaps(xImp->m_collapsedImage, xImp->m_expandedImage);
@@ -426,6 +455,14 @@ void SfxConfigGroupListBox::InitModule()
sal_Int32 c1 = lGroups.getLength();
sal_Int32 i1 = 0;
+ if ( c1 )
+ {
+ // Add All Commands category
+ SvTreeListEntry* pEntry = InsertEntry( CUI_RES(RID_SVXSTR_ALLFUNCTIONS) );
+ aArr.push_back( o3tl::make_unique<SfxGroupInfo_Impl>( SfxCfgKind::GROUP_ALLFUNCTIONS, 0 ) );
+ pEntry->SetUserData(aArr.back().get());
+ }
+
for (i1=0; i1<c1; ++i1)
{
sal_Int16& rGroupID = lGroups[i1];
@@ -442,8 +479,8 @@ void SfxConfigGroupListBox::InitModule()
{ continue; }
SvTreeListEntry* pEntry = InsertEntry(sGroupName);
- SfxGroupInfo_Impl* pInfo = new SfxGroupInfo_Impl(SfxCfgKind::GROUP_FUNCTION, rGroupID);
- pEntry->SetUserData(pInfo);
+ aArr.push_back( o3tl::make_unique<SfxGroupInfo_Impl>( SfxCfgKind::GROUP_FUNCTION, rGroupID ) );
+ pEntry->SetUserData(aArr.back().get());
}
}
catch(const css::uno::RuntimeException&)
@@ -506,6 +543,131 @@ namespace
}
+void SfxConfigGroupListBox::FillScriptList(const css::uno::Reference< css::script::browse::XBrowseNode >& xRootNode,
+ SvTreeListEntry* pParentEntry, bool bCheapChildrenOnDemand)
+{
+ try {
+ if ( xRootNode->hasChildNodes() )
+ {
+ Sequence< Reference< browse::XBrowseNode > > children =
+ xRootNode->getChildNodes();
+ bool bIsRootNode = false;
+
+ OUString user("user");
+ OUString share("share");
+ if ( xRootNode->getName() == "Root" )
+ {
+ bIsRootNode = true;
+ }
+
+ //To mimic current starbasic behaviour we
+ //need to make sure that only the current document
+ //is displayed in the config tree. Tests below
+ //set the bDisplay flag to FALSE if the current
+ //node is a first level child of the Root and is NOT
+ //either the current document, user or share
+ OUString currentDocTitle;
+ Reference< XModel > xDocument( lcl_getScriptableDocument_nothrow( m_xFrame ) );
+ if ( xDocument.is() )
+ {
+ currentDocTitle = ::comphelper::DocumentInfo::getDocumentTitle( xDocument );
+ }
+
+ for ( sal_Int32 n = 0; n < children.getLength(); ++n )
+ {
+ Reference< browse::XBrowseNode >& theChild = children[n];
+ bool bDisplay = true;
+ OUString uiName = theChild->getName();
+ if ( bIsRootNode )
+ {
+ if ( ! ((theChild->getName().equals( user ) || theChild->getName().equals( share ) ||
+ theChild->getName().equals( currentDocTitle ) ) ) )
+ {
+ bDisplay=false;
+ }
+ else
+ {
+ if ( uiName.equals( user ) )
+ {
+ uiName = xImp->m_sMyMacros;
+ }
+ else if ( uiName.equals( share ) )
+ {
+ uiName = xImp->m_sProdMacros;
+ }
+ }
+ }
+ if (children[n]->getType() != browse::BrowseNodeTypes::SCRIPT && bDisplay )
+ {
+// We call acquire on the XBrowseNode so that it does not
+// get autodestructed and become invalid when accessed later.
+ theChild->acquire();
+
+ Image aImage = GetImage( theChild, m_xContext, bIsRootNode );
+ SvTreeListEntry* pNewEntry =
+ InsertEntry( uiName, pParentEntry );
+ SetExpandedEntryBmp( pNewEntry, aImage );
+ SetCollapsedEntryBmp( pNewEntry, aImage );
+
+ aArr.push_back( o3tl::make_unique<SfxGroupInfo_Impl>(SfxCfgKind::GROUP_SCRIPTCONTAINER,
+ 0, static_cast<void *>( theChild.get())));
+
+ pNewEntry->SetUserData( aArr.back().get() );
+
+ if ( !bCheapChildrenOnDemand && children[n]->hasChildNodes() )
+ {
+ Sequence< Reference< browse::XBrowseNode > > grandchildren =
+ children[n]->getChildNodes();
+
+ for ( sal_Int32 m = 0; m < grandchildren.getLength(); ++m )
+ {
+ if ( grandchildren[m]->getType() == browse::BrowseNodeTypes::CONTAINER )
+ {
+ pNewEntry->EnableChildrenOnDemand();
+ m = grandchildren.getLength();
+ }
+ }
+ }
+ else
+ {
+ /* i30923 - Would be nice if there was a better
+ * way to determine if a basic lib had children
+ * without having to ask for them (which forces
+ * the library to be loaded */
+ pNewEntry->EnableChildrenOnDemand();
+ }
+ }
+ }
+ }
+ }
+ catch (RuntimeException&) {
+ // do nothing, the entry will not be displayed in the UI
+ }
+}
+
+void SfxConfigGroupListBox::FillFunctionsList(const css::uno::Sequence<DispatchInformation>& xCommands)
+{
+ for (const auto & rInfo : xCommands)
+ {
+ OUString sUIName = MapCommand2UIName(rInfo.Command);
+ Image aImage;
+ if ( m_pImageProvider )
+ aImage = m_pImageProvider->GetImage( rInfo.Command );
+
+ SvTreeListEntry* pFuncEntry = nullptr;
+ if ( !!aImage )
+ pFuncEntry = pFunctionListBox->InsertEntry( sUIName, aImage, aImage );
+ else
+ pFuncEntry = pFunctionListBox->InsertEntry(sUIName );
+
+ aArr.push_back( o3tl::make_unique<SfxGroupInfo_Impl>( SfxCfgKind::FUNCTION_SLOT, 0 ) );
+ SfxGroupInfo_Impl* pGrpInfo = aArr.back().get();
+ pGrpInfo->sCommand = rInfo.Command;
+ pGrpInfo->sLabel = sUIName;
+ pFuncEntry->SetUserData(pGrpInfo);
+ }
+}
+
void SfxConfigGroupListBox::Init(const css::uno::Reference< css::uno::XComponentContext >& xContext,
const css::uno::Reference< css::frame::XFrame >& xFrame,
const OUString& sModuleLongName,
@@ -524,7 +686,8 @@ void SfxConfigGroupListBox::Init(const css::uno::Reference< css::uno::XComponent
m_xModuleCategoryInfo.set(m_xGlobalCategoryInfo->getByName(m_sModuleLongName), css::uno::UNO_QUERY_THROW);
m_xUICmdDescription = css::frame::theUICommandDescription::get( m_xContext );
- InitModule();
+ if ( bEventMode )
+ InitModule();
}
SAL_INFO("cui.customize", "** ** About to initialise SF Scripts");
@@ -563,100 +726,12 @@ void SfxConfigGroupListBox::Init(const css::uno::Reference< css::uno::XComponent
{
//We are only showing scripts not slot APIs so skip
//Root node and show location nodes
- try {
- if ( rootNode->hasChildNodes() )
- {
- Sequence< Reference< browse::XBrowseNode > > children =
- rootNode->getChildNodes();
- bool bIsRootNode = false;
-
- OUString user("user");
- OUString share("share");
- if ( rootNode->getName() == "Root" )
- {
- bIsRootNode = true;
- }
-
- //To mimic current starbasic behaviour we
- //need to make sure that only the current document
- //is displayed in the config tree. Tests below
- //set the bDisplay flag to FALSE if the current
- //node is a first level child of the Root and is NOT
- //either the current document, user or share
- OUString currentDocTitle;
- Reference< XModel > xDocument( lcl_getScriptableDocument_nothrow( m_xFrame ) );
- if ( xDocument.is() )
- {
- currentDocTitle = ::comphelper::DocumentInfo::getDocumentTitle( xDocument );
- }
-
- for ( sal_Int32 n = 0; n < children.getLength(); ++n )
- {
- Reference< browse::XBrowseNode >& theChild = children[n];
- bool bDisplay = true;
- OUString uiName = theChild->getName();
- if ( bIsRootNode )
- {
- if ( ! ((theChild->getName().equals( user ) || theChild->getName().equals( share ) ||
- theChild->getName().equals( currentDocTitle ) ) ) )
- {
- bDisplay=false;
- }
- else
- {
- if ( uiName.equals( user ) )
- {
- uiName = xImp->m_sMyMacros;
- }
- else if ( uiName.equals( share ) )
- {
- uiName = xImp->m_sProdMacros;
- }
- }
- }
- if (children[n]->getType() != browse::BrowseNodeTypes::SCRIPT && bDisplay )
- {
-// We call acquire on the XBrowseNode so that it does not
-// get autodestructed and become invalid when accessed later.
- theChild->acquire();
-
- Image aImage = GetImage( theChild, xCtx, bIsRootNode );
- SvTreeListEntry* pNewEntry =
- InsertEntry( uiName );
- SetExpandedEntryBmp( pNewEntry, aImage );
- SetCollapsedEntryBmp( pNewEntry, aImage );
-
- aArr.push_back( o3tl::make_unique<SfxGroupInfo_Impl>(SfxCfgKind::GROUP_SCRIPTCONTAINER,
- 0, static_cast<void *>( theChild.get())));
-
- pNewEntry->SetUserData( aArr.back().get() );
-
- if ( children[n]->hasChildNodes() )
- {
- Sequence< Reference< browse::XBrowseNode > > grandchildren =
- children[n]->getChildNodes();
-
- for ( sal_Int32 m = 0; m < grandchildren.getLength(); ++m )
- {
- if ( grandchildren[m]->getType() == browse::BrowseNodeTypes::CONTAINER )
- {
- pNewEntry->EnableChildrenOnDemand();
- m = grandchildren.getLength();
- }
- }
- }
- }
- }
- }
- }
- catch (RuntimeException&) {
- // do nothing, the entry will not be displayed in the UI
- }
+ FillScriptList(rootNode, nullptr, false);
}
}
// add styles
- if ( m_xContext.is() )
+ if ( bEventMode && m_xContext.is() )
{
OUString sStyle(xImp->m_aStrGroupStyles);
SvTreeListEntry *pEntry = InsertEntry( sStyle );
@@ -801,6 +876,7 @@ void SfxConfigGroupListBox::GroupSelected()
pFunctionListBox->SetUpdateMode(false);
pFunctionListBox->ClearAll();
if ( pInfo->nKind != SfxCfgKind::GROUP_FUNCTION &&
+ pInfo->nKind != SfxCfgKind::GROUP_ALLFUNCTIONS &&
pInfo->nKind != SfxCfgKind::GROUP_SCRIPTCONTAINER &&
pInfo->nKind != SfxCfgKind::GROUP_STYLES )
{
@@ -810,25 +886,36 @@ void SfxConfigGroupListBox::GroupSelected()
switch ( pInfo->nKind )
{
+ case SfxCfgKind::GROUP_ALLFUNCTIONS:
+ {
+ css::uno::Reference< css::frame::XDispatchInformationProvider > xProvider( m_xFrame, UNO_QUERY );
+ SvTreeListEntry *pCurrEntry = First();
+ while( pCurrEntry )
+ {
+ SfxGroupInfo_Impl *pCurrentInfo = static_cast<SfxGroupInfo_Impl*>(pCurrEntry->GetUserData());
+ if (pCurrentInfo->nKind == SfxCfgKind::GROUP_FUNCTION)
+ {
+ css::uno::Sequence< css::frame::DispatchInformation > lCommands;
+ try
+ {
+ lCommands = xProvider->getConfigurableDispatchInformation( pCurrentInfo->nUniqueID );
+ FillFunctionsList( lCommands );
+ }
+ catch ( container::NoSuchElementException& )
+ {
+ }
+ }
+ pCurrEntry = Next( pCurrEntry );
+ }
+ break;
+ }
+
case SfxCfgKind::GROUP_FUNCTION :
{
sal_uInt16 nGroup = pInfo->nUniqueID;
css::uno::Reference< css::frame::XDispatchInformationProvider > xProvider (m_xFrame, css::uno::UNO_QUERY_THROW);
css::uno::Sequence< css::frame::DispatchInformation > lCommands = xProvider->getConfigurableDispatchInformation(nGroup);
- sal_Int32 c = lCommands.getLength();
- sal_Int32 i = 0;
-
- for (i=0; i<c; ++i)
- {
- const css::frame::DispatchInformation& rInfo = lCommands[i];
- OUString sUIName = MapCommand2UIName(rInfo.Command);
- SvTreeListEntry* pFuncEntry = pFunctionListBox->InsertEntry(sUIName);
- SfxGroupInfo_Impl* pGrpInfo = new SfxGroupInfo_Impl(SfxCfgKind::FUNCTION_SLOT, 0);
- pGrpInfo->sCommand = rInfo.Command;
- pGrpInfo->sLabel = sUIName;
- pFuncEntry->SetUserData(pGrpInfo);
- }
-
+ FillFunctionsList( lCommands );
break;
}
@@ -849,7 +936,7 @@ void SfxConfigGroupListBox::GroupSelected()
{
if (children[n]->getType() == browse::BrowseNodeTypes::SCRIPT)
{
- OUString uri;
+ OUString uri, description;
Reference < beans::XPropertySet >xPropSet( children[n], UNO_QUERY );
if (!xPropSet.is())
@@ -861,6 +948,15 @@ void SfxConfigGroupListBox::GroupSelected()
xPropSet->getPropertyValue("URI");
value >>= uri;
+ try
+ {
+ value = xPropSet->getPropertyValue("Description");
+ value >>= description;
+ }
+ catch (Exception &) {
+ // do nothing, the description will be empty
+ }
+
OUString* pScriptURI = new OUString( uri );
Image aImage = GetImage( children[n], Reference< XComponentContext >(), false );
@@ -872,6 +968,7 @@ void SfxConfigGroupListBox::GroupSelected()
pFunctionListBox->aArr.push_back( o3tl::make_unique<SfxGroupInfo_Impl>( SfxCfgKind::FUNCTION_SCRIPT, 0, pScriptURI ));
pFunctionListBox->aArr.back()->sCommand = uri;
pFunctionListBox->aArr.back()->sLabel = children[n]->getName();
+ pFunctionListBox->aArr.back()->sHelpText = description;
pNewEntry->SetUserData( pFunctionListBox->aArr.back().get() );
}
}
@@ -962,87 +1059,7 @@ void SfxConfigGroupListBox::RequestingChildren( SvTreeListEntry *pEntry )
{
Reference< browse::XBrowseNode > rootNode(
static_cast< browse::XBrowseNode* >( pInfo->pObject ) ) ;
-
- try {
- if ( rootNode->hasChildNodes() )
- {
- Sequence< Reference< browse::XBrowseNode > > children =
- rootNode->getChildNodes();
- bool bIsRootNode = false;
-
- OUString user("user");
- OUString share("share" );
- if ( rootNode->getName() == "Root" )
- {
- bIsRootNode = true;
- }
-
- /* To mimic current starbasic behaviour we
- need to make sure that only the current document
- is displayed in the config tree. Tests below
- set the bDisplay flag to sal_False if the current
- node is a first level child of the Root and is NOT
- either the current document, user or share */
- OUString currentDocTitle;
- Reference< XModel > xDocument( lcl_getScriptableDocument_nothrow( m_xFrame ) );
- if ( xDocument.is() )
- {
- currentDocTitle = ::comphelper::DocumentInfo::getDocumentTitle( xDocument );
- }
-
- sal_Int32 nLen = children.getLength();
- for ( sal_Int32 n = 0; n < nLen; ++n )
- {
- Reference< browse::XBrowseNode >& theChild = children[n];
- OUString aName( theChild->getName() );
- bool bDisplay = true;
- if ( bIsRootNode )
- {
- if ( !( (aName.equals(user) || aName.equals(share) || aName.equals(currentDocTitle) ) ) )
- bDisplay=false;
- }
- if ( children[n].is() && children[n]->getType() != browse::BrowseNodeTypes::SCRIPT && bDisplay )
- {
-
- /*
- We call acquire on the XBrowseNode so that it does not
- get autodestructed and become invalid when accessed later.
- */
- theChild->acquire();
-
- Image aImage = GetImage( theChild, Reference< XComponentContext >(), false );
- SvTreeListEntry* pNewEntry =
- InsertEntry( theChild->getName(), pEntry );
- SetExpandedEntryBmp( pNewEntry, aImage );
- SetCollapsedEntryBmp(pNewEntry, aImage );
-
- aArr.push_back( o3tl::make_unique<SfxGroupInfo_Impl>(
- SfxCfgKind::GROUP_SCRIPTCONTAINER,
- 0, static_cast<void *>( theChild.get())));
-
- pNewEntry->SetUserData( aArr.back().get() );
-
- if ( children[n]->hasChildNodes() )
- {
- Sequence< Reference< browse::XBrowseNode > > grandchildren =
- children[n]->getChildNodes();
-
- for ( sal_Int32 m = 0; m < grandchildren.getLength(); ++m )
- {
- if ( grandchildren[m]->getType() == browse::BrowseNodeTypes::CONTAINER )
- {
- pNewEntry->EnableChildrenOnDemand();
- m = grandchildren.getLength();
- }
- }
- }
- }
- }
- }
- }
- catch (RuntimeException&) {
- // do nothing, the entry will not be displayed in the UI
- }
+ FillScriptList(rootNode, pEntry, true /* i30923 */ );
}
break;
}
@@ -1139,4 +1156,191 @@ void SfxConfigGroupListBox::SelectMacro( const OUString& rBasic,
}
}
+/*
+ * Implementation of SvxScriptSelectorDialog
+ *
+ * This dialog is used for selecting Slot API commands
+ * and Scripting Framework Scripts.
+ */
+
+SvxScriptSelectorDialog::SvxScriptSelectorDialog(
+ vcl::Window* pParent, bool bShowSlots, const css::uno::Reference< css::frame::XFrame >& xFrame)
+ : ModalDialog(pParent, "MacroSelectorDialog", "cui/ui/macroselectordialog.ui")
+ , m_bShowSlots(bShowSlots)
+{
+ get<FixedText>("libraryft")->Show(!m_bShowSlots);
+ get<FixedText>("categoryft")->Show(m_bShowSlots);
+ get<FixedText>("macronameft")->Show(!m_bShowSlots);
+ get<FixedText>("commandsft")->Show(m_bShowSlots);
+ get(m_pDescriptionText, "description");
+ get(m_pCommands, "commands");
+ if (m_bShowSlots)
+ {
+ // If we are showing Slot API commands update labels in the UI
+ SetText(CUI_RESSTR(RID_SVXSTR_SELECTOR_ADD_COMMANDS));
+ get(m_pCancelButton, "close");
+ get(m_pDialogDescription, "helptoolbar");
+ get(m_pOKButton, "add");
+ }
+ else
+ {
+ get(m_pCancelButton, "cancel");
+ get(m_pDialogDescription, "helpmacro");
+ get(m_pOKButton, "ok");
+ }
+ m_pCancelButton->Show();
+ m_pDialogDescription->Show();
+ m_pOKButton->Show();
+
+ get(m_pCategories, "categories");
+ m_pCategories->SetFunctionListBox(m_pCommands);
+ m_pCategories->Init(comphelper::getProcessComponentContext(), xFrame,
+ vcl::CommandInfoProvider::GetModuleIdentifier(xFrame), bShowSlots);
+
+ m_pCategories->SetSelectHdl(
+ LINK( this, SvxScriptSelectorDialog, SelectHdl ) );
+ m_pCommands->SetSelectHdl( LINK( this, SvxScriptSelectorDialog, SelectHdl ) );
+ m_pCommands->SetDoubleClickHdl( LINK( this, SvxScriptSelectorDialog, FunctionDoubleClickHdl ) );
+
+ m_pOKButton->SetClickHdl( LINK( this, SvxScriptSelectorDialog, ClickHdl ) );
+ m_pCancelButton->SetClickHdl( LINK( this, SvxScriptSelectorDialog, ClickHdl ) );
+
+ m_sDefaultDesc = m_pDescriptionText->GetText();
+
+ // Support style commands
+ uno::Reference<frame::XController> xController;
+ uno::Reference<frame::XModel> xModel;
+ if (xFrame.is())
+ xController = xFrame->getController();
+ if (xController.is())
+ xModel = xController->getModel();
+
+ m_aStylesInfo.setModel(xModel);
+ m_pCommands->SetStylesInfo(&m_aStylesInfo);
+ m_pCategories->SetStylesInfo(&m_aStylesInfo);
+
+ UpdateUI();
+}
+
+SvxScriptSelectorDialog::~SvxScriptSelectorDialog()
+{
+ disposeOnce();
+}
+
+void SvxScriptSelectorDialog::dispose()
+{
+ m_pDialogDescription.clear();
+ m_pCategories.clear();
+ m_pCommands.clear();
+ m_pOKButton.clear();
+ m_pCancelButton.clear();
+ m_pDescriptionText.clear();
+ ModalDialog::dispose();
+}
+
+IMPL_LINK( SvxScriptSelectorDialog, SelectHdl, SvTreeListBox*, pCtrl, void )
+{
+ if (pCtrl == m_pCategories)
+ {
+ m_pCategories->GroupSelected();
+ }
+ UpdateUI();
+}
+
+IMPL_LINK_NOARG( SvxScriptSelectorDialog, FunctionDoubleClickHdl, SvTreeListBox*, bool )
+{
+ if (m_pOKButton->IsEnabled())
+ ClickHdl(m_pOKButton);
+ return false;
+}
+
+// Check if command is selected and enable the OK button accordingly
+// Grab the help text for this id if available and update the description field
+void
+SvxScriptSelectorDialog::UpdateUI()
+{
+ OUString url = GetScriptURL();
+ if ( !url.isEmpty() )
+ {
+ OUString sMessage = m_pCommands->GetHelpText();
+ m_pDescriptionText->SetText(sMessage.isEmpty() ? m_sDefaultDesc : sMessage);
+
+ m_pOKButton->Enable();
+ }
+ else
+ {
+ m_pDescriptionText->SetText(m_sDefaultDesc);
+ m_pOKButton->Enable( false );
+ }
+}
+
+IMPL_LINK( SvxScriptSelectorDialog, ClickHdl, Button *, pButton, void )
+{
+ if (pButton == m_pCancelButton)
+ {
+ EndDialog();
+ }
+ else if (pButton == m_pOKButton)
+ {
+ GetAddHdl().Call( *this );
+
+ // If we are displaying Slot API commands then this the dialog is being
+ // run from Tools/Configure and we should not close it
+ if ( !m_bShowSlots )
+ {
+ EndDialog( RET_OK );
+ }
+ else
+ {
+ // Select the next entry in the list if possible
+ SvTreeListEntry* current = m_pCommands->FirstSelected();
+ SvTreeListEntry* next = SvTreeListBox::NextSibling( current );
+
+ if ( next != nullptr )
+ {
+ m_pCommands->Select( next );
+ }
+ }
+ }
+}
+
+void
+SvxScriptSelectorDialog::SetRunLabel()
+{
+ m_pOKButton->SetText(CUI_RESSTR(RID_SVXSTR_SELECTOR_RUN));
+}
+
+void
+SvxScriptSelectorDialog::SetDialogDescription( const OUString& rDescription )
+{
+ m_pDialogDescription->SetText( rDescription );
+}
+
+OUString
+SvxScriptSelectorDialog::GetScriptURL() const
+{
+ OUString result;
+
+ SvTreeListEntry *pEntry = const_cast< SvxScriptSelectorDialog* >( this )->m_pCommands->FirstSelected();
+ if ( pEntry )
+ {
+ SfxGroupInfo_Impl *pData = static_cast<SfxGroupInfo_Impl*>(pEntry->GetUserData());
+ if ( ( pData->nKind == SfxCfgKind::FUNCTION_SLOT )
+ || ( pData->nKind == SfxCfgKind::FUNCTION_SCRIPT )
+ || ( pData->nKind == SfxCfgKind::GROUP_STYLES )
+ )
+ {
+ result = pData->sCommand;
+ }
+ }
+
+ return result;
+}
+
+OUString
+SvxScriptSelectorDialog::GetSelectedDisplayName()
+{
+ return m_pCommands->GetEntryText( m_pCommands->FirstSelected() );
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/cui/source/customize/eventdlg.cxx b/cui/source/customize/eventdlg.cxx
index 9e422eb9ba84..bfaac6c5d7e2 100644
--- a/cui/source/customize/eventdlg.cxx
+++ b/cui/source/customize/eventdlg.cxx
@@ -47,7 +47,7 @@
#include <dialmgr.hxx>
#include <cuires.hrc>
#include "helpid.hrc"
-#include "selector.hxx"
+#include "cfgutil.hxx"
#include "cfg.hxx"
diff --git a/cui/source/customize/macropg.cxx b/cui/source/customize/macropg.cxx
index 36b6b1327896..2d689be9a3ba 100644
--- a/cui/source/customize/macropg.cxx
+++ b/cui/source/customize/macropg.cxx
@@ -32,7 +32,7 @@
#include <com/sun/star/container/NoSuchElementException.hpp>
#include <com/sun/star/lang/IllegalArgumentException.hpp>
#include <dialmgr.hxx>
-#include "selector.hxx"
+#include "cfgutil.hxx"
#include "cfg.hxx"
#include "helpid.hrc"
#include <cuires.hrc>
diff --git a/cui/source/customize/selector.cxx b/cui/source/customize/selector.cxx
deleted file mode 100644
index aae8305378fb..000000000000
--- a/cui/source/customize/selector.cxx
+++ /dev/null
@@ -1,1061 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <memory>
-#include <vcl/help.hxx>
-#include <vcl/msgbox.hxx>
-#include <vcl/metric.hxx>
-#include <vcl/vclmedit.hxx>
-#include <vcl/builderfactory.hxx>
-#include "selector.hxx"
-#include "cfg.hxx"
-#include <dialmgr.hxx>
-#include <svx/fmresids.hrc>
-#include <svx/dialmgr.hxx>
-#include <cuires.hrc>
-#include <bitmaps.hlst>
-#include <sfx2/app.hxx>
-#include <sfx2/msg.hxx>
-#include <sfx2/msgpool.hxx>
-#include <sfx2/minfitem.hxx>
-#include <sfx2/objsh.hxx>
-#include <sfx2/dispatch.hxx>
-
-#include <comphelper/documentinfo.hxx>
-#include <comphelper/processfactory.hxx>
-
-#include <com/sun/star/beans/XPropertySet.hpp>
-#include <com/sun/star/container/XChild.hpp>
-#include <com/sun/star/container/XEnumerationAccess.hpp>
-#include <com/sun/star/container/XEnumeration.hpp>
-#include <com/sun/star/document/XEmbeddedScripts.hpp>
-#include <com/sun/star/document/XScriptInvocationContext.hpp>
-#include <com/sun/star/frame/ModuleManager.hpp>
-#include <com/sun/star/frame/Desktop.hpp>
-#include <com/sun/star/frame/XDispatchInformationProvider.hpp>
-#include <com/sun/star/frame/DispatchInformation.hpp>
-#include <com/sun/star/frame/theUICommandDescription.hpp>
-#include <com/sun/star/script/provider/XScriptProviderSupplier.hpp>
-#include <com/sun/star/script/provider/XScriptProvider.hpp>
-#include <com/sun/star/script/browse/theBrowseNodeFactory.hpp>
-#include <com/sun/star/script/browse/XBrowseNode.hpp>
-#include <com/sun/star/script/browse/BrowseNodeTypes.hpp>
-#include <com/sun/star/script/browse/XBrowseNodeFactory.hpp>
-#include <com/sun/star/script/browse/BrowseNodeFactoryViewTypes.hpp>
-#include <com/sun/star/ui/theUICategoryDescription.hpp>
-
-
-using namespace ::com::sun::star;
-using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::script;
-using namespace ::com::sun::star::frame;
-using namespace ::com::sun::star::document;
-using namespace ::com::sun::star::container;
-
-#include <svtools/imagemgr.hxx>
-#include "svtools/treelistentry.hxx"
-#include <tools/urlobj.hxx>
-#include <tools/diagnose_ex.h>
-
-/*
- * The implementations of SvxConfigFunctionListBox and
- * SvxConfigGroupListBox are copied from sfx2/source/dialog/cfg.cxx
- */
-SvxConfigFunctionListBox::SvxConfigFunctionListBox(vcl::Window* pParent, WinBits nStyle)
- : SvTreeListBox(pParent, nStyle | WB_CLIPCHILDREN | WB_HSCROLL | WB_SORT | WB_TABSTOP)
- , pCurEntry(nullptr)
- , m_pDraggingEntry(nullptr)
-{
- GetModel()->SetSortMode( SortAscending );
-
- // Timer for the BallonHelp
- aTimer.SetTimeout( 200 );
- aTimer.SetInvokeHandler(
- LINK( this, SvxConfigFunctionListBox, TimerHdl ) );
-}
-
-VCL_BUILDER_FACTORY_CONSTRUCTOR(SvxConfigFunctionListBox, WB_TABSTOP)
-
-SvxConfigFunctionListBox::~SvxConfigFunctionListBox()
-{
- disposeOnce();
-}
-
-void SvxConfigFunctionListBox::dispose()
-{
- ClearAll();
- SvTreeListBox::dispose();
-}
-
-SvTreeListEntry* SvxConfigFunctionListBox::GetLastSelectedEntry()
-{
- if ( m_pDraggingEntry != nullptr )
- {
- return m_pDraggingEntry;
- }
- else
- {
- return FirstSelected();
- }
-}
-
-void SvxConfigFunctionListBox::MouseMove( const MouseEvent& rMEvt )
-{
- Point aMousePos = rMEvt.GetPosPixel();
- pCurEntry = GetCurEntry();
-
- if ( pCurEntry && GetEntry( aMousePos ) == pCurEntry )
- aTimer.Start();
- else
- {
- ::tools::Rectangle aRect(GetPosPixel(), GetSizePixel());
- Help::ShowBalloon( this, aMousePos, aRect, OUString() );
- aTimer.Stop();
- }
-}
-
-
-IMPL_LINK_NOARG(SvxConfigFunctionListBox, TimerHdl, Timer *, void)
-{
- aTimer.Stop();
- Point aMousePos = GetPointerPosPixel();
- SvTreeListEntry *pEntry = GetCurEntry();
- if ( pEntry && GetEntry( aMousePos ) == pEntry && pCurEntry == pEntry )
- {
- ::tools::Rectangle aRect(GetPosPixel(), GetSizePixel());
- Help::ShowBalloon( this, OutputToScreenPixel(aMousePos), aRect, GetHelpText( pEntry ) );
- }
-}
-
-void SvxConfigFunctionListBox::ClearAll()
-{
- aArr.clear();
- Clear();
-}
-
-OUString SvxConfigFunctionListBox::GetHelpText( SvTreeListEntry *pEntry )
-{
- SvxGroupInfo_Impl *pInfo =
- pEntry ? static_cast<SvxGroupInfo_Impl*>(pEntry->GetUserData()): nullptr;
-
- if ( pInfo )
- {
- if ( pInfo->nKind == SVX_CFGFUNCTION_SLOT )
- {
- OUString aCmdURL( pInfo->sURL );
-
- OUString aHelpText = Application::GetHelp()->GetHelpText( aCmdURL, this );
-
- return aHelpText;
- }
- else if ( pInfo->nKind == SVX_CFGFUNCTION_SCRIPT )
- {
- return pInfo->sHelpText;
- }
- }
-
- return OUString();
-}
-
-void SvxConfigFunctionListBox::FunctionSelected()
-{
- Help::ShowBalloon( this, Point(), ::tools::Rectangle(), OUString() );
-}
-
-// drag and drop support
-DragDropMode SvxConfigFunctionListBox::NotifyStartDrag(
- TransferDataContainer& /*aTransferDataContainer*/, SvTreeListEntry* pEntry )
-{
- m_pDraggingEntry = pEntry;
- return GetDragDropMode();
-}
-
-void SvxConfigFunctionListBox::DragFinished( sal_Int8 /*nDropAction*/ )
-{
- m_pDraggingEntry = nullptr;
-}
-
-sal_Int8
-SvxConfigFunctionListBox::AcceptDrop( const AcceptDropEvent& /*rEvt*/ )
-{
- return DND_ACTION_NONE;
-}
-
-SvxConfigGroupListBox::SvxConfigGroupListBox(vcl::Window* pParent, WinBits nStyle)
- : SvTreeListBox(pParent, nStyle |
- WB_CLIPCHILDREN | WB_HSCROLL | WB_HASBUTTONS | WB_HASLINES | WB_HASLINESATROOT | WB_HASBUTTONSATROOT | WB_TABSTOP)
- , m_bShowSlots(false)
- , pFunctionListBox(nullptr)
- , m_pImageProvider(nullptr)
- , m_hdImage(BitmapEx(RID_CUIBMP_HARDDISK))
- , m_libImage(BitmapEx(RID_CUIBMP_LIB))
- , m_macImage(BitmapEx(RID_CUIBMP_MACRO))
- , m_docImage(BitmapEx(RID_CUIBMP_DOC))
- , m_sMyMacros(CUI_RESSTR(RID_SVXSTR_MYMACROS))
- , m_sProdMacros(CUI_RESSTR(RID_SVXSTR_PRODMACROS))
-{
- SetNodeBitmaps(
- Image(BitmapEx(RID_SVXBMP_COLLAPSEDNODE)),
- Image(BitmapEx(RID_SVXBMP_EXPANDEDNODE))
- );
-}
-
-VCL_BUILDER_FACTORY_CONSTRUCTOR(SvxConfigGroupListBox, WB_TABSTOP)
-
-SvxConfigGroupListBox::~SvxConfigGroupListBox()
-{
- disposeOnce();
-}
-
-void SvxConfigGroupListBox::dispose()
-{
- ClearAll();
- pFunctionListBox.clear();
- SvTreeListBox::dispose();
-}
-
-void SvxConfigGroupListBox::ClearAll()
-{
- aArr.clear();
- Clear();
-}
-
-
-namespace
-{
-
- /** examines a component whether it supports XEmbeddedScripts, or provides access to such a
- component by implementing XScriptInvocationContext.
- @return
- the model which supports the embedded scripts, or <NULL/> if it cannot find such a
- model
- */
- Reference< XModel > lcl_getDocumentWithScripts_throw( const Reference< XInterface >& _rxComponent )
- {
- Reference< XEmbeddedScripts > xScripts( _rxComponent, UNO_QUERY );
- if ( !xScripts.is() )
- {
- Reference< XScriptInvocationContext > xContext( _rxComponent, UNO_QUERY );
- if ( xContext.is() )
- xScripts.set( xContext->getScriptContainer(), UNO_QUERY );
- }
-
- return Reference< XModel >( xScripts, UNO_QUERY );
- }
-
-
- Reference< XModel > lcl_getScriptableDocument_nothrow( const Reference< XFrame >& _rxFrame )
- {
- Reference< XModel > xDocument;
-
- // examine our associated frame
- try
- {
- OSL_ENSURE( _rxFrame.is(), "lcl_getScriptableDocument_nothrow: you need to pass a frame to this dialog/tab page!" );
- if ( _rxFrame.is() )
- {
- // first try the model in the frame
- Reference< XController > xController( _rxFrame->getController(), UNO_SET_THROW );
- xDocument = lcl_getDocumentWithScripts_throw( xController->getModel() );
-
- if ( !xDocument.is() )
- {
- // if there is no suitable document in the frame, try the controller
- xDocument = lcl_getDocumentWithScripts_throw( _rxFrame->getController() );
- }
- }
- }
- catch( const Exception& )
- {
- DBG_UNHANDLED_EXCEPTION();
- }
-
- return xDocument;
- }
-}
-
-void SvxConfigGroupListBox::fillScriptList( const Reference< browse::XBrowseNode >& _rxRootNode, SvTreeListEntry* _pParentEntry, bool _bCheapChildrenOnDemand )
-{
- OSL_PRECOND( _rxRootNode.is(), "SvxConfigGroupListBox::fillScriptList: invalid root node!" );
- if ( !_rxRootNode.is() )
- return;
-
- try
- {
- if ( _rxRootNode->hasChildNodes() )
- {
- Sequence< Reference< browse::XBrowseNode > > children =
- _rxRootNode->getChildNodes();
-
- bool bIsRootNode = _rxRootNode->getName() == "Root";
-
- /* To mimic current starbasic behaviour we
- need to make sure that only the current document
- is displayed in the config tree. Tests below
- set the bDisplay flag to sal_False if the current
- node is a first level child of the Root and is NOT
- either the current document, user or share */
- OUString sCurrentDocTitle;
- Reference< XModel > xWorkingDocument = lcl_getScriptableDocument_nothrow( m_xFrame );
- if ( xWorkingDocument.is() )
- {
- sCurrentDocTitle = ::comphelper::DocumentInfo::getDocumentTitle( xWorkingDocument );
- }
-
- for ( long n = 0; n < children.getLength(); ++n )
- {
- Reference< browse::XBrowseNode >& theChild = children[n];
- //#139111# some crash reports show that it might be unset
- if ( !theChild.is() )
- continue;
- OUString sUIName = theChild->getName();
- bool bDisplay = true;
-
- if ( bIsRootNode
- || ( m_bShowSlots && _pParentEntry && ( GetModel()->GetDepth( _pParentEntry ) == 0 ) )
- // if we show slots (as in the customize dialog)
- // then the user & share are added at depth=1
- )
- {
- if ( sUIName == "user" )
- {
- sUIName = m_sMyMacros;
- bIsRootNode = true;
- }
- else if ( sUIName == "share" )
- {
- sUIName = m_sProdMacros;
- bIsRootNode = true;
- }
- else if ( !sUIName.equals( sCurrentDocTitle ) )
- {
- bDisplay = false;
- }
- }
-
- if ( !bDisplay )
- continue;
-
- if ( children[n]->getType() == browse::BrowseNodeTypes::SCRIPT )
- continue;
-
- SvTreeListEntry* pNewEntry = InsertEntry( sUIName, _pParentEntry );
-
- Image aImage = GetImage( theChild, comphelper::getProcessComponentContext(), bIsRootNode );
- SetExpandedEntryBmp( pNewEntry, aImage );
- SetCollapsedEntryBmp( pNewEntry, aImage );
-
- SvxGroupInfo_Impl* pInfo =
- new SvxGroupInfo_Impl( SVX_CFGGROUP_SCRIPTCONTAINER, 0, theChild );
- pNewEntry->SetUserData( pInfo );
- aArr.push_back( std::unique_ptr<SvxGroupInfo_Impl>(pInfo) );
-
- if ( _bCheapChildrenOnDemand )
- {
- /* i30923 - Would be nice if there was a better
- * way to determine if a basic lib had children
- * without having to ask for them (which forces
- * the library to be loaded */
- pNewEntry->EnableChildrenOnDemand();
- }
- else
- {
- // if there are granchildren we're interested in, display the '+' before
- // the entry, but do not yet expand
- Sequence< Reference< browse::XBrowseNode > > grandchildren =
- children[n]->getChildNodes();
-
- for ( sal_Int32 m = 0; m < grandchildren.getLength(); ++m )
- {
- if ( grandchildren[m]->getType() == browse::BrowseNodeTypes::CONTAINER )
- {
- pNewEntry->EnableChildrenOnDemand();
- break;
- }
- }
- }
- }
- }
- }
- catch (const Exception&)
- {
- DBG_UNHANDLED_EXCEPTION();
- }
-}
-
-void SvxConfigGroupListBox::Init(bool bShowSlots, const Reference< frame::XFrame >& xFrame)
-{
- m_bShowSlots = bShowSlots;
- m_xFrame.set(xFrame);
-
- SetUpdateMode(false);
- ClearAll();
-
- Reference< XComponentContext > xContext(
- comphelper::getProcessComponentContext() );
-
- // are we showing builtin commands?
- if ( m_bShowSlots && m_xFrame.is() )
- {
- Reference< frame::XDispatchInformationProvider > xDIP(
- m_xFrame, UNO_QUERY );
-
- Reference< frame::XModuleManager2 > xModuleManager( frame::ModuleManager::create(xContext) );
-
- OUString aModuleId;
- try{
- aModuleId = xModuleManager->identify( m_xFrame );
- }catch(const uno::Exception&)
- { aModuleId.clear(); }
-
- Reference< container::XNameAccess > const xNameAccess(
- frame::theUICommandDescription::get(xContext) );
- xNameAccess->getByName( aModuleId ) >>= m_xModuleCommands;
-
- Reference< container::XNameAccess > xAllCategories =
- ui::theUICategoryDescription::get( xContext );
-
- Reference< container::XNameAccess > xModuleCategories;
- if ( !aModuleId.isEmpty() )
- {
- try
- {
- xModuleCategories.set( xAllCategories->getByName( aModuleId ), UNO_QUERY );
- }
- catch ( container::NoSuchElementException& )
- {
- }
- }
-
- if ( !xModuleCategories.is() )
- {
- xModuleCategories = xAllCategories;
- }
-
- if ( xModuleCategories.is() )
- {
- SvTreeListEntry *pEntry = InsertEntry( CUI_RES(RID_SVXSTR_ALLFUNCTIONS) );
-
- SvxGroupInfo_Impl *pInfo =
- new SvxGroupInfo_Impl( SVX_CFGGROUP_ALLFUNCTIONS, 0 );
- aArr.push_back( std::unique_ptr<SvxGroupInfo_Impl>(pInfo) );
-
- pEntry->SetUserData( pInfo );
-
- Sequence< sal_Int16 > gids =
- xDIP->getSupportedCommandGroups();
-
- for ( sal_Int32 i = 0; i < gids.getLength(); ++i )
- {
- Sequence< frame::DispatchInformation > commands;
- try
- {
- commands =
- xDIP->getConfigurableDispatchInformation( gids[i] );
- }
- catch ( container::NoSuchElementException& )
- {
- continue;
- }
-
- if ( commands.getLength() == 0 )
- {
- continue;
- }
-
- sal_Int32 gid = gids[i];
- OUString idx = OUString::number( gid );
- OUString group = idx;
- try
- {
- xModuleCategories->getByName( idx ) >>= group;
- }
- catch ( container::NoSuchElementException& )
- {
- }
-
- pEntry = InsertEntry( group );
-
- pInfo = new SvxGroupInfo_Impl( SVX_CFGGROUP_FUNCTION, gids[i] );
- aArr.push_back( std::unique_ptr<SvxGroupInfo_Impl>(pInfo) );
-
- pEntry->SetUserData( pInfo );
- }
- }
- }
-
- // Add Scripting Framework entries
- Reference< browse::XBrowseNode > rootNode;
-
- try
- {
- Reference< browse::XBrowseNodeFactory > xFac = browse::theBrowseNodeFactory::get( xContext );
- rootNode.set( xFac->createView( browse::BrowseNodeFactoryViewTypes::MACROSELECTOR ) );
- }
- catch( const Exception& )
- {
- DBG_UNHANDLED_EXCEPTION();
- }
-
- if ( rootNode.is() )
- {
- if ( m_bShowSlots )
- {
- SvxGroupInfo_Impl *pInfo =
- new SvxGroupInfo_Impl( SVX_CFGGROUP_SCRIPTCONTAINER, 0, rootNode );
-
- OUString aTitle = CUI_RESSTR(RID_SVXSTR_PRODMACROS);
-
- SvTreeListEntry *pNewEntry = InsertEntry( aTitle );
- pNewEntry->SetUserData( pInfo );
- pNewEntry->EnableChildrenOnDemand();
- aArr.push_back( std::unique_ptr<SvxGroupInfo_Impl>(pInfo) );
- }
- else
- {
- fillScriptList( rootNode, nullptr, false );
- }
- }
- MakeVisible( GetEntry( nullptr,0 ) );
- SetUpdateMode( true );
-}
-
-Image SvxConfigGroupListBox::GetImage(
- const Reference< browse::XBrowseNode >& node,
- Reference< XComponentContext > const & xCtx,
- bool bIsRootNode
-)
-{
- Image aImage;
- if ( bIsRootNode )
- {
- if ( node->getName() == "user" || node->getName() == "share" )
- {
- aImage = m_hdImage;
- }
- else
- {
- OUString factoryURL;
- OUString nodeName = node->getName();
- Reference<XInterface> xDocumentModel = getDocumentModel(xCtx, nodeName );
- if ( xDocumentModel.is() )
- {
- Reference< frame::XModuleManager2 > xModuleManager( frame::ModuleManager::create(xCtx) );
- // get the long name of the document:
- OUString appModule( xModuleManager->identify(
- xDocumentModel ) );
- Sequence<beans::PropertyValue> moduleDescr;
- Any aAny = xModuleManager->getByName(appModule);
- if( !( aAny >>= moduleDescr ) )
- {
- throw RuntimeException("SFTreeListBox::Init: failed to get PropertyValue");
- }
- beans::PropertyValue const * pmoduleDescr =
- moduleDescr.getConstArray();
- for ( sal_Int32 pos = moduleDescr.getLength(); pos--; )
- {
- if ( pmoduleDescr[ pos ].Name == "ooSetupFactoryEmptyDocumentURL" )
- {
- pmoduleDescr[ pos ].Value >>= factoryURL;
- break;
- }
- }
- }
- if( !factoryURL.isEmpty() )
- {
- aImage = SvFileInformationManager::GetFileImage( INetURLObject(factoryURL) );
- }
- else
- {
- aImage = m_docImage;
- }
- }
- }
- else
- {
- if( node->getType() == browse::BrowseNodeTypes::SCRIPT )
- aImage = m_macImage;
- else
- aImage = m_libImage;
- }
- return aImage;
-}
-
-Reference< XInterface >
-SvxConfigGroupListBox::getDocumentModel(
- Reference< XComponentContext > const & xCtx, OUString& docName )
-{
- Reference< XInterface > xModel;
- Reference< frame::XDesktop2 > desktop = Desktop::create(xCtx);
-
- Reference< container::XEnumerationAccess > componentsAccess =
- desktop->getComponents();
- Reference< container::XEnumeration > components =
- componentsAccess->createEnumeration();
- while (components->hasMoreElements())
- {
- Reference< frame::XModel > model(
- components->nextElement(), UNO_QUERY );
- if ( model.is() )
- {
- OUString sTdocUrl = ::comphelper::DocumentInfo::getDocumentTitle( model );
- if( sTdocUrl.equals( docName ) )
- {
- xModel = model;
- break;
- }
- }
- }
- return xModel;
-}
-
-void SvxConfigGroupListBox::fillFunctionList(const Sequence< frame::DispatchInformation >& commands)
-{
- for ( sal_Int32 i = 0; i < commands.getLength(); ++i )
- {
- if ( commands[i].Command.isEmpty() )
- {
- continue;
- }
-
- Image aImage;
-
- OUString aCmdURL( commands[i].Command );
-
- if ( m_pImageProvider )
- {
- aImage = m_pImageProvider->GetImage( aCmdURL );
- }
-
- OUString aLabel;
- try
- {
- Any a = m_xModuleCommands->getByName( aCmdURL );
- Sequence< beans::PropertyValue > aPropSeq;
-
- if ( a >>= aPropSeq )
- {
- for ( sal_Int32 k = 0; k < aPropSeq.getLength(); ++k )
- {
- if ( aPropSeq[k].Name == "Name" )
- {
- aPropSeq[k].Value >>= aLabel;
- break;
- }
- }
- }
- }
- catch ( container::NoSuchElementException& )
- {
- }
-
- if ( aLabel.isEmpty() )
- {
- aLabel = commands[i].Command;
- }
-
- SvTreeListEntry* pFuncEntry = nullptr;
- if ( !!aImage )
- {
- pFuncEntry = pFunctionListBox->InsertEntry(
- aLabel, aImage, aImage );
- }
- else
- {
- pFuncEntry = pFunctionListBox->InsertEntry(
- aLabel );
- }
-
- SvxGroupInfo_Impl *_pGroupInfo = new SvxGroupInfo_Impl(
- SVX_CFGFUNCTION_SLOT, 123, aCmdURL, OUString() );
-
- pFunctionListBox->aArr.push_back( std::unique_ptr<SvxGroupInfo_Impl>(_pGroupInfo) );
-
- pFuncEntry->SetUserData( _pGroupInfo );
- }
-}
-
-void SvxConfigGroupListBox::GroupSelected()
-{
- SvTreeListEntry *pEntry = FirstSelected();
- SvxGroupInfo_Impl *pInfo = static_cast<SvxGroupInfo_Impl*>(pEntry->GetUserData());
- pFunctionListBox->SetUpdateMode(false);
- pFunctionListBox->ClearAll();
- if ( pInfo->nKind != SVX_CFGGROUP_FUNCTION &&
- pInfo->nKind != SVX_CFGGROUP_SCRIPTCONTAINER &&
- pInfo->nKind != SVX_CFGGROUP_ALLFUNCTIONS )
- {
- pFunctionListBox->SetUpdateMode(true);
- return;
- }
-
- switch ( pInfo->nKind )
- {
- case SVX_CFGGROUP_FUNCTION:
- {
- Reference< frame::XDispatchInformationProvider > xDIP( m_xFrame, UNO_QUERY );
- Sequence< frame::DispatchInformation > commands;
- try
- {
- commands = xDIP->getConfigurableDispatchInformation( pInfo->nOrd );
- fillFunctionList(commands);
- }
- catch ( container::NoSuchElementException& )
- {
- }
-
- break;
- }
-
- case SVX_CFGGROUP_ALLFUNCTIONS:
- {
- Reference< frame::XDispatchInformationProvider > xDIP( m_xFrame, UNO_QUERY );
- SvTreeListEntry *pCurrEntry = First();
- while( pCurrEntry )
- {
- SvxGroupInfo_Impl *pCurrentInfo = static_cast<SvxGroupInfo_Impl*>(pCurrEntry->GetUserData());
- if (pCurrentInfo->nKind == SVX_CFGGROUP_FUNCTION)
- {
-
-
- Sequence< frame::DispatchInformation > commands;
- try
- {
- commands = xDIP->getConfigurableDispatchInformation( pCurrentInfo->nOrd );
- fillFunctionList(commands);
- }
- catch ( container::NoSuchElementException& )
- {
- }
- }
- pCurrEntry = Next( pCurrEntry );
- };
-
- break;
- }
-
- case SVX_CFGGROUP_SCRIPTCONTAINER:
- {
- Reference< browse::XBrowseNode > rootNode( pInfo->xBrowseNode );
-
- try {
- if ( rootNode->hasChildNodes() )
- {
- Sequence< Reference< browse::XBrowseNode > > children =
- rootNode->getChildNodes();
-
- for ( sal_Int32 n = 0; n < children.getLength(); ++n )
- {
- if (!children[n].is())
- continue;
- if (children[n]->getType() == browse::BrowseNodeTypes::SCRIPT)
- {
- OUString uri;
- OUString description;
-
- Reference < beans::XPropertySet >xPropSet( children[n], UNO_QUERY );
- if (!xPropSet.is())
- {
- continue;
- }
-
- Any value = xPropSet->getPropertyValue("URI");
- value >>= uri;
-
- try
- {
- value = xPropSet->getPropertyValue("Description");
- value >>= description;
- }
- catch (Exception &) {
- // do nothing, the description will be empty
- }
-
- SvxGroupInfo_Impl* _pGroupInfo =
- new SvxGroupInfo_Impl(
- SVX_CFGFUNCTION_SCRIPT, 123, uri, description );
-
- Image aImage = GetImage( children[n], Reference< XComponentContext >(), false );
- SvTreeListEntry* pNewEntry =
- pFunctionListBox->InsertEntry( children[n]->getName() );
- pFunctionListBox->SetExpandedEntryBmp( pNewEntry, aImage );
- pFunctionListBox->SetCollapsedEntryBmp(pNewEntry, aImage );
-
- pNewEntry->SetUserData( _pGroupInfo );
-
- pFunctionListBox->aArr.push_back( std::unique_ptr<SvxGroupInfo_Impl>(_pGroupInfo) );
-
- }
- }
- }
- }
- catch (const Exception&)
- {
- DBG_UNHANDLED_EXCEPTION();
- }
- break;
- }
-
- default:
- {
- return;
- }
- }
-
- if ( pFunctionListBox->GetEntryCount() )
- pFunctionListBox->Select( pFunctionListBox->GetEntry( nullptr, 0 ) );
-
- pFunctionListBox->SetUpdateMode(true);
-}
-
-bool SvxConfigGroupListBox::Expand( SvTreeListEntry* pParent )
-{
- bool bRet = SvTreeListBox::Expand( pParent );
- if ( bRet )
- {
- sal_uLong nEntries = GetOutputSizePixel().Height() / GetEntryHeight();
-
- sal_uLong nChildCount = GetVisibleChildCount( pParent );
-
- if ( nChildCount+1 > nEntries )
- {
- MakeVisible( pParent, true );
- }
- else
- {
- SvTreeListEntry *pEntry = GetFirstEntryInView();
- sal_uLong nParentPos = 0;
- while ( pEntry && pEntry != pParent )
- {
- ++nParentPos;
- pEntry = GetNextEntryInView( pEntry );
- }
-
- if ( nParentPos + nChildCount + 1 > nEntries )
- ScrollOutputArea( (short)( nEntries - ( nParentPos + nChildCount + 1 ) ) );
- }
- }
-
- return bRet;
-}
-
-void SvxConfigGroupListBox::RequestingChildren( SvTreeListEntry *pEntry )
-{
- SvxGroupInfo_Impl *pInfo = static_cast<SvxGroupInfo_Impl*>(pEntry->GetUserData());
- pInfo->bWasOpened = true;
- switch ( pInfo->nKind )
- {
- case SVX_CFGGROUP_SCRIPTCONTAINER:
- {
- if ( !GetChildCount( pEntry ) )
- {
- Reference< browse::XBrowseNode > rootNode( pInfo->xBrowseNode ) ;
- fillScriptList( rootNode, pEntry, true /* i30923 */ );
- }
- break;
- }
-
- default:
- OSL_FAIL( "Falscher Gruppentyp!" );
- break;
- }
-}
-
-/*
- * Implementation of SvxScriptSelectorDialog
- *
- * This dialog is used for selecting Slot API commands
- * and Scripting Framework Scripts.
- */
-
-SvxScriptSelectorDialog::SvxScriptSelectorDialog(
- vcl::Window* pParent, bool bShowSlots, const Reference< frame::XFrame >& xFrame)
- : ModalDialog(pParent, "MacroSelectorDialog", "cui/ui/macroselectordialog.ui")
- , m_bShowSlots(bShowSlots)
-{
- get<FixedText>("libraryft")->Show(!m_bShowSlots);
- get<FixedText>("categoryft")->Show(m_bShowSlots);
- get<FixedText>("macronameft")->Show(!m_bShowSlots);
- get<FixedText>("commandsft")->Show(m_bShowSlots);
- get(m_pDescriptionText, "description");
- get(m_pCommands, "commands");
- if (m_bShowSlots)
- {
- // If we are showing Slot API commands update labels in the UI, and
- // enable drag'n'drop
- SetText(CUI_RESSTR(RID_SVXSTR_SELECTOR_ADD_COMMANDS));
- m_pCommands->SetDragDropMode( DragDropMode::APP_COPY );
-
- get(m_pCancelButton, "close");
- get(m_pDialogDescription, "helptoolbar");
- get(m_pOKButton, "add");
- }
- else
- {
- get(m_pCancelButton, "cancel");
- get(m_pDialogDescription, "helpmacro");
- get(m_pOKButton, "ok");
- }
- m_pCancelButton->Show();
- m_pDialogDescription->Show();
- m_pOKButton->Show();
-
- get(m_pCategories, "categories");
- m_pCategories->SetFunctionListBox(m_pCommands);
- m_pCategories->Init(bShowSlots, xFrame);
-
- m_pCategories->SetSelectHdl(
- LINK( this, SvxScriptSelectorDialog, SelectHdl ) );
- m_pCommands->SetSelectHdl( LINK( this, SvxScriptSelectorDialog, SelectHdl ) );
- m_pCommands->SetDoubleClickHdl( LINK( this, SvxScriptSelectorDialog, FunctionDoubleClickHdl ) );
-
- m_pOKButton->SetClickHdl( LINK( this, SvxScriptSelectorDialog, ClickHdl ) );
- m_pCancelButton->SetClickHdl( LINK( this, SvxScriptSelectorDialog, ClickHdl ) );
-
- m_sDefaultDesc = m_pDescriptionText->GetText();
-
- UpdateUI();
-}
-
-SvxScriptSelectorDialog::~SvxScriptSelectorDialog()
-{
- disposeOnce();
-}
-
-void SvxScriptSelectorDialog::dispose()
-{
- m_pDialogDescription.clear();
- m_pCategories.clear();
- m_pCommands.clear();
- m_pOKButton.clear();
- m_pCancelButton.clear();
- m_pDescriptionText.clear();
- ModalDialog::dispose();
-}
-
-IMPL_LINK( SvxScriptSelectorDialog, SelectHdl, SvTreeListBox*, pCtrl, void )
-{
- if (pCtrl == m_pCategories)
- {
- m_pCategories->GroupSelected();
- }
- else if (pCtrl == m_pCommands)
- {
- m_pCommands->FunctionSelected();
- }
- UpdateUI();
-}
-
-IMPL_LINK_NOARG( SvxScriptSelectorDialog, FunctionDoubleClickHdl, SvTreeListBox*, bool )
-{
- if (m_pOKButton->IsEnabled())
- ClickHdl(m_pOKButton);
- return false;
-}
-
-// Check if command is selected and enable the OK button accordingly
-// Grab the help text for this id if available and update the description field
-void
-SvxScriptSelectorDialog::UpdateUI()
-{
- OUString url = GetScriptURL();
- if ( !url.isEmpty() )
- {
- OUString sMessage =
- m_pCommands->GetHelpText(m_pCommands->FirstSelected());
- m_pDescriptionText->SetText(sMessage.isEmpty() ? m_sDefaultDesc : sMessage);
-
- m_pOKButton->Enable();
- }
- else
- {
- m_pDescriptionText->SetText(m_sDefaultDesc);
- m_pOKButton->Enable( false );
- }
-}
-
-IMPL_LINK( SvxScriptSelectorDialog, ClickHdl, Button *, pButton, void )
-{
- if (pButton == m_pCancelButton)
- {
- EndDialog();
- }
- else if (pButton == m_pOKButton)
- {
- GetAddHdl().Call( *this );
-
- // If we are displaying Slot API commands then this the dialog is being
- // run from Tools/Configure and we should not close it
- if ( !m_bShowSlots )
- {
- EndDialog( RET_OK );
- }
- else
- {
- // Select the next entry in the list if possible
- SvTreeListEntry* current = m_pCommands->FirstSelected();
- SvTreeListEntry* next = SvTreeListBox::NextSibling( current );
-
- if ( next != nullptr )
- {
- m_pCommands->Select( next );
- }
- }
- }
-}
-
-void
-SvxScriptSelectorDialog::SetRunLabel()
-{
- m_pOKButton->SetText(CUI_RESSTR(RID_SVXSTR_SELECTOR_RUN));
-}
-
-void
-SvxScriptSelectorDialog::SetDialogDescription( const OUString& rDescription )
-{
- m_pDialogDescription->SetText( rDescription );
-}
-
-OUString
-SvxScriptSelectorDialog::GetScriptURL() const
-{
- OUString result;
-
- SvTreeListEntry *pEntry = const_cast< SvxScriptSelectorDialog* >( this )->m_pCommands->GetLastSelectedEntry();
- if ( pEntry )
- {
- SvxGroupInfo_Impl *pData = static_cast<SvxGroupInfo_Impl*>(pEntry->GetUserData());
- if ( ( pData->nKind == SVX_CFGFUNCTION_SLOT )
- || ( pData->nKind == SVX_CFGFUNCTION_SCRIPT )
- )
- {
- result = pData->sURL;
- }
- }
-
- return result;
-}
-
-OUString
-SvxScriptSelectorDialog::GetSelectedDisplayName()
-{
- return m_pCommands->GetEntryText( m_pCommands->GetLastSelectedEntry() );
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/cui/source/dialogs/scriptdlg.cxx b/cui/source/dialogs/scriptdlg.cxx
index 438c87b50957..e4106a558944 100644
--- a/cui/source/dialogs/scriptdlg.cxx
+++ b/cui/source/dialogs/scriptdlg.cxx
@@ -31,7 +31,7 @@
#include <bitmaps.hlst>
#include "scriptdlg.hxx"
#include <dialmgr.hxx>
-#include "selector.hxx"
+#include "cfgutil.hxx"
#include <com/sun/star/uno/XComponentContext.hpp>
#include <com/sun/star/frame/XDesktop.hpp>
diff --git a/cui/source/factory/cuiexp.cxx b/cui/source/factory/cuiexp.cxx
index ac53518218e5..7f558b73c57a 100644
--- a/cui/source/factory/cuiexp.cxx
+++ b/cui/source/factory/cuiexp.cxx
@@ -39,7 +39,7 @@
#include "passwdomdlg.hxx"
#include "screenshotannotationdlg.hxx"
#include "cuihyperdlg.hxx"
-#include "selector.hxx"
+#include "cfgutil.hxx"
#include "SpellDialog.hxx"
#include "zoom.hxx"
#include "showcols.hxx"
diff --git a/cui/source/factory/dlgfact.cxx b/cui/source/factory/dlgfact.cxx
index 19f48e5c224e..ef3775226053 100644
--- a/cui/source/factory/dlgfact.cxx
+++ b/cui/source/factory/dlgfact.cxx
@@ -74,7 +74,7 @@
#include "postdlg.hxx"
#include "grfpage.hxx"
#include "scriptdlg.hxx"
-#include "selector.hxx"
+#include "cfgutil.hxx"
#include "macropg.hxx"
#include "sdrcelldlg.hxx"
#include "newtabledlg.hxx"
diff --git a/cui/source/inc/cfg.hxx b/cui/source/inc/cfg.hxx
index c70c1ee7216d..40dc23710dc7 100644
--- a/cui/source/inc/cfg.hxx
+++ b/cui/source/inc/cfg.hxx
@@ -46,7 +46,7 @@
#include <vector>
#include <vcl/msgbox.hxx>
-#include "selector.hxx"
+#include "cfgutil.hxx"
class SvxConfigEntry;
class SvxConfigPage;
diff --git a/cui/source/inc/cfgutil.hxx b/cui/source/inc/cfgutil.hxx
index ef73b0bb429a..d053555bba86 100644
--- a/cui/source/inc/cfgutil.hxx
+++ b/cui/source/inc/cfgutil.hxx
@@ -27,12 +27,16 @@
#include <com/sun/star/frame/XFrame.hpp>
#include <com/sun/star/lang/XSingleComponentFactory.hpp>
#include <com/sun/star/container/XNameAccess.hpp>
+#include <com/sun/star/frame/XDispatchInformationProvider.hpp>
#include <com/sun/star/script/browse/XBrowseNode.hpp>
#include <vcl/timer.hxx>
#include <svtools/svtabbx.hxx>
#include <svtools/treelistbox.hxx>
+#include <vcl/dialog.hxx>
#include <vcl/image.hxx>
+class Button;
+class SaveInData;
class SfxMacroInfoItem;
struct SfxStyleInfo_Impl
@@ -81,6 +85,7 @@ enum class SfxCfgKind
GROUP_SCRIPTCONTAINER = 3,
FUNCTION_SCRIPT = 4,
GROUP_STYLES = 5,
+ GROUP_ALLFUNCTIONS = 6
};
struct SfxGroupInfo_Impl
@@ -91,6 +96,7 @@ struct SfxGroupInfo_Impl
bool bWasOpened;
OUString sCommand;
OUString sLabel;
+ OUString sHelpText;
SfxGroupInfo_Impl( SfxCfgKind n, sal_uInt16 nr, void* pObj = nullptr ) :
nKind( n ), nUniqueID( nr ), pObject( pObj ), bWasOpened(false) {}
@@ -116,6 +122,7 @@ public:
OUString GetCurCommand();
OUString GetCurLabel();
OUString GetSelectedScriptURI();
+ OUString GetHelpText();
void SetStylesInfo(SfxStylesInfo_Impl* pStyles);
};
@@ -125,7 +132,7 @@ class SfxConfigGroupListBox : public SvTreeListBox
std::unique_ptr<SvxConfigGroupBoxResource_Impl> xImp;
VclPtr<SfxConfigFunctionListBox> pFunctionListBox;
SfxGroupInfoArr_Impl aArr;
-
+ SaveInData* m_pImageProvider;
OUString m_sModuleLongName;
css::uno::Reference< css::uno::XComponentContext > m_xContext;
css::uno::Reference< css::frame::XFrame > m_xFrame;
@@ -146,7 +153,9 @@ class SfxConfigGroupListBox : public SvTreeListBox
void InitModule();
-
+ void FillScriptList(const css::uno::Reference< css::script::browse::XBrowseNode >& xRootNode,
+ SvTreeListEntry* pParentEntry, bool bCheapChildrenOnDemand);
+ void FillFunctionsList(const css::uno::Sequence< css::frame::DispatchInformation >& xCommands);
OUString MapCommand2UIName(const OUString& sCommand);
SfxStylesInfo_Impl* pStylesInfo;
@@ -167,12 +176,57 @@ public:
bool bEventMode);
void SetFunctionListBox( SfxConfigFunctionListBox *pBox )
{ pFunctionListBox = pBox; }
+ void SetImageProvider( SaveInData* provider )
+ { m_pImageProvider = provider; }
void GroupSelected();
void SelectMacro( const SfxMacroInfoItem* );
void SelectMacro( const OUString&, const OUString& );
void SetStylesInfo(SfxStylesInfo_Impl* pStyles);
};
+class SvxScriptSelectorDialog : public ModalDialog
+{
+ VclPtr<FixedText> m_pDialogDescription;
+ VclPtr<SfxConfigGroupListBox> m_pCategories;
+ VclPtr<SfxConfigFunctionListBox> m_pCommands;
+ VclPtr<PushButton> m_pOKButton;
+ VclPtr<PushButton> m_pCancelButton;
+ VclPtr<VclMultiLineEdit> m_pDescriptionText;
+ OUString m_sDefaultDesc;
+ SfxStylesInfo_Impl m_aStylesInfo;
+ bool m_bShowSlots;
+ Link<SvxScriptSelectorDialog&,void> m_aAddHdl;
+
+ DECL_LINK( ClickHdl, Button *, void );
+ DECL_LINK( SelectHdl, SvTreeListBox*, void );
+ DECL_LINK( FunctionDoubleClickHdl, SvTreeListBox*, bool );
+
+ void UpdateUI();
+
+public:
+
+ SvxScriptSelectorDialog (
+ vcl::Window* pParent = nullptr,
+ bool bShowSlots = false,
+ const css::uno::Reference< css::frame::XFrame >& xFrame = nullptr
+ );
+ virtual ~SvxScriptSelectorDialog() override;
+ virtual void dispose() override;
+
+ void SetAddHdl( const Link<SvxScriptSelectorDialog&,void>& rLink ) { m_aAddHdl = rLink; }
+ const Link<SvxScriptSelectorDialog&,void>& GetAddHdl() const { return m_aAddHdl; }
+
+ void SetImageProvider(SaveInData* provider)
+ {
+ m_pCategories->SetImageProvider(provider);
+ }
+
+ OUString GetScriptURL() const;
+ OUString GetSelectedDisplayName();
+ void SetRunLabel();
+ void SetDialogDescription(const OUString& rDescription);
+};
+
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/cui/source/inc/selector.hxx b/cui/source/inc/selector.hxx
deleted file mode 100644
index 826a4ccefe34..000000000000
--- a/cui/source/inc/selector.hxx
+++ /dev/null
@@ -1,222 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-#ifndef INCLUDED_CUI_SOURCE_INC_SELECTOR_HXX
-#define INCLUDED_CUI_SOURCE_INC_SELECTOR_HXX
-
-#include <vcl/lstbox.hxx>
-#include <vcl/fixed.hxx>
-#include <vcl/group.hxx>
-#include <vcl/menubtn.hxx>
-#include <svtools/treelistbox.hxx>
-
-#include <com/sun/star/uno/XComponentContext.hpp>
-#include <com/sun/star/frame/DispatchInformation.hpp>
-#include <com/sun/star/frame/XFrame.hpp>
-#include <com/sun/star/container/XNameAccess.hpp>
-#include <com/sun/star/script/browse/XBrowseNode.hpp>
-
-#include <memory>
-
-class SaveInData;
-
-#define SVX_CFGGROUP_FUNCTION 1
-#define SVX_CFGFUNCTION_SLOT 2
-#define SVX_CFGGROUP_SCRIPTCONTAINER 3
-#define SVX_CFGFUNCTION_SCRIPT 4
-#define SVX_CFGGROUP_ALLFUNCTIONS 5
-
-struct SvxGroupInfo_Impl
-{
- sal_uInt16 nKind;
- sal_uInt16 nOrd;
- css::uno::Reference< css::script::browse::XBrowseNode >
- xBrowseNode;
- OUString sURL;
- OUString sHelpText;
- bool bWasOpened;
-
- SvxGroupInfo_Impl( sal_uInt16 n, sal_uInt16 nr )
- :nKind( n )
- ,nOrd( nr )
- ,xBrowseNode()
- ,sURL()
- ,sHelpText()
- ,bWasOpened(false)
- {
- }
-
- SvxGroupInfo_Impl( sal_uInt16 n, sal_uInt16 nr, const css::uno::Reference< css::script::browse::XBrowseNode >& _rxNode )
- :nKind( n )
- ,nOrd( nr )
- ,xBrowseNode( _rxNode )
- ,sURL()
- ,sHelpText()
- ,bWasOpened(false)
- {
- }
-
- SvxGroupInfo_Impl( sal_uInt16 n, sal_uInt16 nr, const OUString& _rURL, const OUString& _rHelpText )
- :nKind( n )
- ,nOrd( nr )
- ,xBrowseNode()
- ,sURL( _rURL )
- ,sHelpText( _rHelpText )
- ,bWasOpened(false)
- {
- }
-};
-
-typedef std::vector<std::unique_ptr<SvxGroupInfo_Impl> > SvxGroupInfoArr_Impl;
-
-class SvxConfigFunctionListBox : public SvTreeListBox
-{
-friend class SvxConfigGroupListBox;
- Timer aTimer;
- SvTreeListEntry* pCurEntry;
- SvxGroupInfoArr_Impl aArr;
- SvTreeListEntry* m_pDraggingEntry;
-
- DECL_LINK(TimerHdl, Timer *, void);
- virtual void MouseMove( const MouseEvent& rMEvt ) override;
-
-public:
- SvxConfigFunctionListBox(vcl::Window* pParent, WinBits nStyle);
- virtual ~SvxConfigFunctionListBox() override;
- virtual void dispose() override;
- void ClearAll();
- OUString GetHelpText( SvTreeListEntry *pEntry );
- using Window::GetHelpText;
- SvTreeListEntry* GetLastSelectedEntry();
- void FunctionSelected();
-
- // drag n drop methods
- virtual sal_Int8 AcceptDrop( const AcceptDropEvent& rEvt ) override;
-
- virtual DragDropMode NotifyStartDrag(
- TransferDataContainer&, SvTreeListEntry* ) override;
-
- virtual void DragFinished( sal_Int8 ) override;
-};
-
-class SvxConfigGroupListBox : public SvTreeListBox
-{
- SvxGroupInfoArr_Impl aArr;
- bool m_bShowSlots;
-
- VclPtr<SvxConfigFunctionListBox> pFunctionListBox;
- SaveInData* m_pImageProvider;
-
- css::uno::Reference
- < css::frame::XFrame > m_xFrame;
-
- css::uno::Reference
- < css::container::XNameAccess > m_xModuleCommands;
-
- Image m_hdImage;
- Image m_libImage;
- Image m_macImage;
- Image m_docImage;
- OUString m_sMyMacros;
- OUString m_sProdMacros;
- Image GetImage(
- const css::uno::Reference< css::script::browse::XBrowseNode >& node,
- css::uno::Reference< css::uno::XComponentContext > const & xCtx,
- bool bIsRootNode
- );
-
- static css::uno::Reference< css::uno::XInterface > getDocumentModel(
- css::uno::Reference< css::uno::XComponentContext > const & xCtx,
- OUString& docName
- );
-
-private:
- void fillScriptList(
- const css::uno::Reference< css::script::browse::XBrowseNode >& _rxRootNode,
- SvTreeListEntry* _pParentEntry,
- bool _bCheapChildrenOnDemand
- );
- void fillFunctionList( const com::sun::star::uno::Sequence< com::sun::star::frame::DispatchInformation >& commands );
-
-protected:
- virtual void RequestingChildren( SvTreeListEntry *pEntry) override;
- virtual bool Expand( SvTreeListEntry* pParent ) override;
-
-public:
- SvxConfigGroupListBox(vcl::Window* pParent, WinBits nStyle);
- virtual ~SvxConfigGroupListBox() override;
- virtual void dispose() override;
-
- void Init(bool bShowSlots, const css::uno::Reference
- < css::frame::XFrame >& xFrame);
-
- void ClearAll();
- void GroupSelected();
-
- void SetFunctionListBox( SvxConfigFunctionListBox *pBox )
- { pFunctionListBox = pBox; }
-
- void SetImageProvider( SaveInData* provider )
- { m_pImageProvider = provider; }
-};
-
-class SvxScriptSelectorDialog : public ModalDialog
-{
- VclPtr<FixedText> m_pDialogDescription;
- VclPtr<SvxConfigGroupListBox> m_pCategories;
- VclPtr<SvxConfigFunctionListBox> m_pCommands;
- VclPtr<PushButton> m_pOKButton;
- VclPtr<PushButton> m_pCancelButton;
- VclPtr<VclMultiLineEdit> m_pDescriptionText;
- OUString m_sDefaultDesc;
- bool m_bShowSlots;
- Link<SvxScriptSelectorDialog&,void> m_aAddHdl;
-
- DECL_LINK( ClickHdl, Button *, void );
- DECL_LINK( SelectHdl, SvTreeListBox*, void );
- DECL_LINK( FunctionDoubleClickHdl, SvTreeListBox*, bool );
-
- void UpdateUI();
-
-public:
-
- SvxScriptSelectorDialog (
- vcl::Window* pParent = nullptr,
- bool bShowSlots = false,
- const css::uno::Reference< css::frame::XFrame >& xFrame = nullptr
- );
- virtual ~SvxScriptSelectorDialog() override;
- virtual void dispose() override;
-
- void SetAddHdl( const Link<SvxScriptSelectorDialog&,void>& rLink ) { m_aAddHdl = rLink; }
- const Link<SvxScriptSelectorDialog&,void>& GetAddHdl() const { return m_aAddHdl; }
-
- void SetImageProvider(SaveInData* provider)
- {
- m_pCategories->SetImageProvider(provider);
- }
-
- OUString GetScriptURL() const;
- OUString GetSelectedDisplayName();
- void SetRunLabel();
- void SetDialogDescription(const OUString& rDescription);
-};
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/cui/uiconfig/ui/macroselectordialog.ui b/cui/uiconfig/ui/macroselectordialog.ui
index 7036463d6aa1..476b526ffef4 100644
--- a/cui/uiconfig/ui/macroselectordialog.ui
+++ b/cui/uiconfig/ui/macroselectordialog.ui
@@ -159,7 +159,7 @@
<property name="top_padding">6</property>
<property name="left_padding">12</property>
<child>
- <object class="cuilo-SvxConfigGroupListBox" id="categories:border">
+ <object class="cuilo-SfxConfigGroupListBox" id="categories:border">
<property name="width_request">280</property>
<property name="height_request">300</property>
<property name="visible">True</property>
@@ -167,7 +167,7 @@
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<child internal-child="selection">
- <object class="GtkTreeSelection" id="SvxConfigGroupListBox-selection1"/>
+ <object class="GtkTreeSelection" id="SfxConfigGroupListBox-selection1"/>
</child>
</object>
</child>
@@ -231,7 +231,7 @@
<property name="top_padding">6</property>
<property name="left_padding">12</property>
<child>
- <object class="cuilo-SvxConfigFunctionListBox" id="commands:border">
+ <object class="cuilo-SfxConfigFunctionListBox" id="commands:border">
<property name="width_request">280</property>
<property name="height_request">300</property>
<property name="visible">True</property>
@@ -239,7 +239,7 @@
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<child internal-child="selection">
- <object class="GtkTreeSelection" id="SvxConfigFunctionListBox-selection1"/>
+ <object class="GtkTreeSelection" id="SfxConfigFunctionListBox-selection1"/>
</child>
</object>
</child>