From 821f32c51d9d6833a4b4f4803f5862d87a5e5f62 Mon Sep 17 00:00:00 2001 From: Caolán McNamara Date: Mon, 20 Aug 2012 10:50:32 +0100 Subject: add a mechanism to create custom widgets via VclBuilder Change-Id: Ia78ba7126de6a1b3dac3877e3eef9a30194f8777 --- sw/source/ui/misc/numberingtypelistbox.cxx | 18 ++++++++++++++++++ vcl/inc/vcl/builder.hxx | 1 + vcl/source/window/builder.cxx | 10 +++++++++- 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/sw/source/ui/misc/numberingtypelistbox.cxx b/sw/source/ui/misc/numberingtypelistbox.cxx index 4f25c4bb2642..82d81b814499 100644 --- a/sw/source/ui/misc/numberingtypelistbox.cxx +++ b/sw/source/ui/misc/numberingtypelistbox.cxx @@ -58,6 +58,24 @@ SwNumberingTypeListBox::SwNumberingTypeListBox( Window* pWin, const ResId& rResI Reload(nTypeFlags); } +SwNumberingTypeListBox::SwNumberingTypeListBox( Window* pWin, WinBits nStyle, sal_uInt16 nTypeFlags ) : + ListBox(pWin, nStyle), + pImpl(new SwNumberingTypeListBox_Impl) +{ + uno::Reference xContext( ::comphelper::getProcessComponentContext() ); + uno::Reference xDefNum = text::DefaultNumberingProvider::create(xContext); + + pImpl->xInfo = uno::Reference(xDefNum, uno::UNO_QUERY); + Reload(nTypeFlags); +} + +extern "C" SAL_DLLPUBLIC_EXPORT Window* SAL_CALL makeSwNumberingTypeListBox(Window *pParent) +{ + SwNumberingTypeListBox *pListBox = new SwNumberingTypeListBox(pParent, WB_LEFT|WB_DROPDOWN|WB_VCENTER|WB_3DLOOK); + pListBox->SetDropDownLineCount(16); + return pListBox; +} + SwNumberingTypeListBox::~SwNumberingTypeListBox() { delete pImpl; diff --git a/vcl/inc/vcl/builder.hxx b/vcl/inc/vcl/builder.hxx index e43ac1bf3a6a..48e8a476bac0 100644 --- a/vcl/inc/vcl/builder.hxx +++ b/vcl/inc/vcl/builder.hxx @@ -42,6 +42,7 @@ class VCL_DLLPUBLIC VclBuilder { public: typedef std::map stringmap; + typedef Window* (*customMakeWidget)(Window *pParent); private: struct WinAndId { diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx index cd2b30b57ca8..b51ab9a37e4a 100644 --- a/vcl/source/window/builder.cxx +++ b/vcl/source/window/builder.cxx @@ -26,6 +26,7 @@ * instead of those above. */ +#include #include #include #include @@ -451,7 +452,14 @@ Window *VclBuilder::makeObject(Window *pParent, const rtl::OString &name, const else if (name.equalsL(RTL_CONSTASCII_STRINGPARAM("GtkDrawingArea"))) pWindow = new Window(pParent); else - fprintf(stderr, "TO-DO, implement %s\n", name.getStr()); + { + rtl::OString sFunction = rtl::OString("make") + name; + customMakeWidget pFunction = (customMakeWidget)osl_getAsciiFunctionSymbol(NULL, sFunction.getStr()); + if (pFunction) + pWindow = (*pFunction)(pParent); + } + if (!pWindow) + fprintf(stderr, "TO-DO, implement %s or add a make%s function\n", name.getStr(), name.getStr()); if (pWindow) { pWindow->SetHelpId(m_sHelpRoot + id); -- cgit