summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2012-08-20 10:50:32 +0100
committerCaolán McNamara <caolanm@redhat.com>2012-09-28 08:48:36 +0100
commit821f32c51d9d6833a4b4f4803f5862d87a5e5f62 (patch)
tree93c9ecfb56b6736b418e7d8daa469d340ff62700
parent970acf533d038a261882ca000e47c4f430ea6907 (diff)
add a mechanism to create custom widgets via VclBuilder
Change-Id: Ia78ba7126de6a1b3dac3877e3eef9a30194f8777
-rw-r--r--sw/source/ui/misc/numberingtypelistbox.cxx18
-rw-r--r--vcl/inc/vcl/builder.hxx1
-rw-r--r--vcl/source/window/builder.cxx10
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);