diff options
author | Caolán McNamara <caolanm@redhat.com> | 2012-08-20 10:50:32 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2012-09-28 08:48:36 +0100 |
commit | 821f32c51d9d6833a4b4f4803f5862d87a5e5f62 (patch) | |
tree | 93c9ecfb56b6736b418e7d8daa469d340ff62700 | |
parent | 970acf533d038a261882ca000e47c4f430ea6907 (diff) |
add a mechanism to create custom widgets via VclBuilder
Change-Id: Ia78ba7126de6a1b3dac3877e3eef9a30194f8777
-rw-r--r-- | sw/source/ui/misc/numberingtypelistbox.cxx | 18 | ||||
-rw-r--r-- | vcl/inc/vcl/builder.hxx | 1 | ||||
-rw-r--r-- | vcl/source/window/builder.cxx | 10 |
3 files changed, 28 insertions, 1 deletions
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<uno::XComponentContext> xContext( ::comphelper::getProcessComponentContext() ); + uno::Reference<text::XDefaultNumberingProvider> xDefNum = text::DefaultNumberingProvider::create(xContext); + + pImpl->xInfo = uno::Reference<text::XNumberingTypeInfo>(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<rtl::OString, rtl::OString> 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 <osl/module.h> #include <vcl/builder.hxx> #include <vcl/button.hxx> #include <vcl/dialog.hxx> @@ -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); |