[Libreoffice-commits] core.git: 2 commits - cui/source cui/uiconfig include/svx include/vcl svx/source

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Mon Sep 10 16:21:07 UTC 2018


 cui/source/inc/numpages.hxx             |   24 +-
 cui/source/tabpages/numpages.cxx        |   83 +++-----
 cui/uiconfig/ui/pickbulletpage.ui       |   25 ++
 cui/uiconfig/ui/picknumberingpage.ui    |   22 +-
 include/svx/numvset.hxx                 |   38 +++
 include/vcl/customweld.hxx              |    1 
 svx/source/dialog/svxbmpnumvalueset.cxx |  330 ++++++++++++++++++++++++++++++++
 7 files changed, 463 insertions(+), 60 deletions(-)

New commits:
commit a27ae800fed5a974c9b255f7ce2b38ec2dbaa426
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Mon Sep 10 13:51:08 2018 +0100
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Mon Sep 10 18:20:55 2018 +0200

    weld SvxSingleNumPickTabPage
    
    Change-Id: I6d8cf1d63b30472072e2d464c3ba6f173f4d030f
    Reviewed-on: https://gerrit.libreoffice.org/60264
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/cui/source/inc/numpages.hxx b/cui/source/inc/numpages.hxx
index 2d22a18b8076..bef652167040 100644
--- a/cui/source/inc/numpages.hxx
+++ b/cui/source/inc/numpages.hxx
@@ -88,7 +88,6 @@ class SvxSingleNumPickTabPage final : public SfxTabPage
     using TabPage::ActivatePage;
     using TabPage::DeactivatePage;
 
-    VclPtr<SvxNumValueSet>  m_pExamplesVS;
     SvxNumSettingsArr_Impl  aNumSettingsArr;
     std::unique_ptr<SvxNumRule> pActNum;
     std::unique_ptr<SvxNumRule> pSaveNum;
@@ -98,12 +97,14 @@ class SvxSingleNumPickTabPage final : public SfxTabPage
 
     sal_uInt16              nNumItemId;
 
-    DECL_LINK(NumSelectHdl_Impl, ValueSet*, void);
-    DECL_LINK(DoubleClickHdl_Impl, ValueSet*, void);
+    std::unique_ptr<NumValueSet> m_xExamplesVS;
+    std::unique_ptr<weld::CustomWeld> m_xExamplesVSWin;
+
+    DECL_LINK(NumSelectHdl_Impl, SvtValueSet*, void);
+    DECL_LINK(DoubleClickHdl_Impl, SvtValueSet*, void);
 
 public:
-        SvxSingleNumPickTabPage(vcl::Window* pParent,
-                               const SfxItemSet& rSet);
+    SvxSingleNumPickTabPage(TabPageParent pParent, const SfxItemSet& rSet);
     virtual ~SvxSingleNumPickTabPage() override;
     virtual void dispose() override;
 
@@ -116,7 +117,6 @@ public:
     virtual void        Reset( const SfxItemSet* rSet ) override;
 };
 
-
 class SvxBulletPickTabPage final : public SfxTabPage
 {
     using TabPage::ActivatePage;
diff --git a/cui/source/tabpages/numpages.cxx b/cui/source/tabpages/numpages.cxx
index aa40c183bc51..f8a411f9ff4f 100644
--- a/cui/source/tabpages/numpages.cxx
+++ b/cui/source/tabpages/numpages.cxx
@@ -170,19 +170,19 @@ static const vcl::Font& lcl_GetDefaultBulletFont()
     return aDefBulletFont;
 }
 
-SvxSingleNumPickTabPage::SvxSingleNumPickTabPage(vcl::Window* pParent,
-                               const SfxItemSet& rSet)
-    : SfxTabPage(pParent, "PickNumberingPage", "cui/ui/picknumberingpage.ui", &rSet)
+SvxSingleNumPickTabPage::SvxSingleNumPickTabPage(TabPageParent pParent, const SfxItemSet& rSet)
+    : SfxTabPage(pParent, "cui/ui/picknumberingpage.ui", "PickNumberingPage", &rSet)
     , nActNumLvl(SAL_MAX_UINT16)
     , bModified(false)
     , bPreset(false)
     , nNumItemId(SID_ATTR_NUMBERING_RULE)
+    , m_xExamplesVS(new NumValueSet)
+    , m_xExamplesVSWin(new weld::CustomWeld(*m_xBuilder, "valueset", *m_xExamplesVS))
 {
     SetExchangeSupport();
-    get(m_pExamplesVS, "valueset");
-    m_pExamplesVS->init(NumberingPageType::SINGLENUM);
-    m_pExamplesVS->SetSelectHdl(LINK(this, SvxSingleNumPickTabPage, NumSelectHdl_Impl));
-    m_pExamplesVS->SetDoubleClickHdl(LINK(this, SvxSingleNumPickTabPage, DoubleClickHdl_Impl));
+    m_xExamplesVS->init(NumberingPageType::SINGLENUM);
+    m_xExamplesVS->SetSelectHdl(LINK(this, SvxSingleNumPickTabPage, NumSelectHdl_Impl));
+    m_xExamplesVS->SetDoubleClickHdl(LINK(this, SvxSingleNumPickTabPage, DoubleClickHdl_Impl));
 
     Reference<XDefaultNumberingProvider> xDefNum = SvxNumOptionsTabPageHelper::GetNumberingProvider();
     if(xDefNum.is())
@@ -208,7 +208,7 @@ SvxSingleNumPickTabPage::SvxSingleNumPickTabPage(vcl::Window* pParent,
         {
         }
         Reference<XNumberingFormatter> xFormat(xDefNum, UNO_QUERY);
-        m_pExamplesVS->SetNumberingSettings(aNumberings, xFormat, rLocale);
+        m_xExamplesVS->SetNumberingSettings(aNumberings, xFormat, rLocale);
     }
 }
 
@@ -219,16 +219,15 @@ SvxSingleNumPickTabPage::~SvxSingleNumPickTabPage()
 
 void SvxSingleNumPickTabPage::dispose()
 {
-    pActNum.reset();
-    pSaveNum.reset();
-    m_pExamplesVS.clear();
+    m_xExamplesVSWin.reset();
+    m_xExamplesVS.reset();
     SfxTabPage::dispose();
 }
 
-VclPtr<SfxTabPage> SvxSingleNumPickTabPage::Create( TabPageParent pParent,
-                                                    const SfxItemSet* rAttrSet)
+VclPtr<SfxTabPage> SvxSingleNumPickTabPage::Create(TabPageParent pParent,
+                                                   const SfxItemSet* rAttrSet)
 {
-    return VclPtr<SvxSingleNumPickTabPage>::Create(pParent.pParent, *rAttrSet);
+    return VclPtr<SvxSingleNumPickTabPage>::Create(pParent, *rAttrSet);
 }
 
 bool  SvxSingleNumPickTabPage::FillItemSet( SfxItemSet* rSet )
@@ -263,13 +262,13 @@ void  SvxSingleNumPickTabPage::ActivatePage(const SfxItemSet& rSet)
     if(pActNum && *pSaveNum != *pActNum)
     {
         *pActNum = *pSaveNum;
-        m_pExamplesVS->SetNoSelection();
+        m_xExamplesVS->SetNoSelection();
     }
 
     if(pActNum && (!lcl_IsNumFmtSet(pActNum.get(), nActNumLvl) || bIsPreset))
     {
-        m_pExamplesVS->SelectItem(1);
-        NumSelectHdl_Impl(m_pExamplesVS);
+        m_xExamplesVS->SelectItem(1);
+        NumSelectHdl_Impl(m_xExamplesVS.get());
         bPreset = true;
     }
     bPreset |= bIsPreset;
@@ -310,13 +309,13 @@ void  SvxSingleNumPickTabPage::Reset( const SfxItemSet* rSet )
         *pActNum = *pSaveNum;
 }
 
-IMPL_LINK_NOARG(SvxSingleNumPickTabPage, NumSelectHdl_Impl, ValueSet*, void)
+IMPL_LINK_NOARG(SvxSingleNumPickTabPage, NumSelectHdl_Impl, SvtValueSet*, void)
 {
     if(pActNum)
     {
         bPreset = false;
         bModified = true;
-        sal_uInt16 nIdx = m_pExamplesVS->GetSelectedItemId() - 1;
+        sal_uInt16 nIdx = m_xExamplesVS->GetSelectedItemId() - 1;
         DBG_ASSERT(aNumSettingsArr.size() > nIdx, "wrong index");
         if(aNumSettingsArr.size() <= nIdx)
             return;
@@ -349,14 +348,13 @@ IMPL_LINK_NOARG(SvxSingleNumPickTabPage, NumSelectHdl_Impl, ValueSet*, void)
     }
 }
 
-IMPL_LINK_NOARG(SvxSingleNumPickTabPage, DoubleClickHdl_Impl, ValueSet*, void)
+IMPL_LINK_NOARG(SvxSingleNumPickTabPage, DoubleClickHdl_Impl, SvtValueSet*, void)
 {
-    NumSelectHdl_Impl(m_pExamplesVS);
+    NumSelectHdl_Impl(m_xExamplesVS.get());
     PushButton& rOk = GetTabDialog()->GetOKButton();
     rOk.GetClickHdl().Call(&rOk);
 }
 
-
 SvxBulletPickTabPage::SvxBulletPickTabPage(TabPageParent pParent, const SfxItemSet& rSet)
     : SfxTabPage(pParent, "cui/ui/pickbulletpage.ui", "PickBulletPage", &rSet)
     , nActNumLvl(SAL_MAX_UINT16)
diff --git a/cui/uiconfig/ui/picknumberingpage.ui b/cui/uiconfig/ui/picknumberingpage.ui
index 13eb0317c380..1dc87446970b 100644
--- a/cui/uiconfig/ui/picknumberingpage.ui
+++ b/cui/uiconfig/ui/picknumberingpage.ui
@@ -18,11 +18,29 @@
         <property name="top_padding">6</property>
         <property name="left_padding">12</property>
         <child>
-          <object class="svxlo-SvxNumValueSet" id="valueset">
+          <object class="GtkScrolledWindow" id="valuesetwin">
             <property name="visible">True</property>
-            <property name="can_focus">False</property>
+            <property name="can_focus">True</property>
             <property name="hexpand">True</property>
             <property name="vexpand">True</property>
+            <property name="hscrollbar_policy">never</property>
+            <property name="vscrollbar_policy">never</property>
+            <property name="shadow_type">in</property>
+            <child>
+              <object class="GtkViewport">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <child>
+                  <object class="GtkDrawingArea" id="valueset">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="events">GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_STRUCTURE_MASK</property>
+                    <property name="hexpand">True</property>
+                    <property name="vexpand">True</property>
+                  </object>
+                </child>
+              </object>
+            </child>
           </object>
         </child>
       </object>
commit 17cbd1dcd12b140fd22477635edcb9874fbc439a
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Mon Sep 10 10:37:54 2018 +0100
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Mon Sep 10 18:20:42 2018 +0200

    weld SvxBulletPickTabPage
    
    Change-Id: I0b3e48cc63984208c8e4a090d6630dd5325d776e
    Reviewed-on: https://gerrit.libreoffice.org/60257
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/cui/source/inc/numpages.hxx b/cui/source/inc/numpages.hxx
index cac9a110959c..2d22a18b8076 100644
--- a/cui/source/inc/numpages.hxx
+++ b/cui/source/inc/numpages.hxx
@@ -37,6 +37,7 @@
 
 #define MN_GALLERY_ENTRY 100
 
+class NumValueSet;
 class SvxColorListBox;
 class SvxNumRule;
 class SvxBmpNumValueSet;
@@ -121,7 +122,6 @@ class SvxBulletPickTabPage final : public SfxTabPage
     using TabPage::ActivatePage;
     using TabPage::DeactivatePage;
 
-    VclPtr<SvxNumValueSet>     m_pExamplesVS;
     std::unique_ptr<SvxNumRule> pActNum;
     std::unique_ptr<SvxNumRule> pSaveNum;
     sal_uInt16          nActNumLvl;
@@ -131,11 +131,13 @@ class SvxBulletPickTabPage final : public SfxTabPage
 
     OUString            sBulletCharFormatName;
 
-    DECL_LINK(NumSelectHdl_Impl, ValueSet*, void);
-    DECL_LINK(DoubleClickHdl_Impl, ValueSet*, void);
+    std::unique_ptr<NumValueSet> m_xExamplesVS;
+    std::unique_ptr<weld::CustomWeld> m_xExamplesVSWin;
+
+    DECL_LINK(NumSelectHdl_Impl, SvtValueSet*, void);
+    DECL_LINK(DoubleClickHdl_Impl, SvtValueSet*, void);
 public:
-        SvxBulletPickTabPage(vcl::Window* pParent,
-                               const SfxItemSet& rSet);
+    SvxBulletPickTabPage(TabPageParent pParent, const SfxItemSet& rSet);
     virtual ~SvxBulletPickTabPage() override;
     virtual void dispose() override;
 
diff --git a/cui/source/tabpages/numpages.cxx b/cui/source/tabpages/numpages.cxx
index 6f5445084751..aa40c183bc51 100644
--- a/cui/source/tabpages/numpages.cxx
+++ b/cui/source/tabpages/numpages.cxx
@@ -357,19 +357,19 @@ IMPL_LINK_NOARG(SvxSingleNumPickTabPage, DoubleClickHdl_Impl, ValueSet*, void)
 }
 
 
-SvxBulletPickTabPage::SvxBulletPickTabPage(vcl::Window* pParent,
-                               const SfxItemSet& rSet)
-    : SfxTabPage(pParent, "PickBulletPage", "cui/ui/pickbulletpage.ui", &rSet)
+SvxBulletPickTabPage::SvxBulletPickTabPage(TabPageParent pParent, const SfxItemSet& rSet)
+    : SfxTabPage(pParent, "cui/ui/pickbulletpage.ui", "PickBulletPage", &rSet)
     , nActNumLvl(SAL_MAX_UINT16)
     , bModified(false)
     , bPreset(false)
     , nNumItemId(SID_ATTR_NUMBERING_RULE)
+    , m_xExamplesVS(new NumValueSet)
+    , m_xExamplesVSWin(new weld::CustomWeld(*m_xBuilder, "valueset", *m_xExamplesVS))
 {
     SetExchangeSupport();
-    get(m_pExamplesVS, "valueset");
-    m_pExamplesVS->init(NumberingPageType::BULLET);
-    m_pExamplesVS->SetSelectHdl(LINK(this, SvxBulletPickTabPage, NumSelectHdl_Impl));
-    m_pExamplesVS->SetDoubleClickHdl(LINK(this, SvxBulletPickTabPage, DoubleClickHdl_Impl));
+    m_xExamplesVS->init(NumberingPageType::BULLET);
+    m_xExamplesVS->SetSelectHdl(LINK(this, SvxBulletPickTabPage, NumSelectHdl_Impl));
+    m_xExamplesVS->SetDoubleClickHdl(LINK(this, SvxBulletPickTabPage, DoubleClickHdl_Impl));
 }
 
 SvxBulletPickTabPage::~SvxBulletPickTabPage()
@@ -379,16 +379,15 @@ SvxBulletPickTabPage::~SvxBulletPickTabPage()
 
 void SvxBulletPickTabPage::dispose()
 {
-    pActNum.reset();
-    pSaveNum.reset();
-    m_pExamplesVS.clear();
+    m_xExamplesVSWin.reset();
+    m_xExamplesVS.reset();
     SfxTabPage::dispose();
 }
 
-VclPtr<SfxTabPage> SvxBulletPickTabPage::Create( TabPageParent pParent,
-                                                 const SfxItemSet* rAttrSet)
+VclPtr<SfxTabPage> SvxBulletPickTabPage::Create(TabPageParent pParent,
+                                                const SfxItemSet* rAttrSet)
 {
-    return VclPtr<SvxBulletPickTabPage>::Create(pParent.pParent, *rAttrSet);
+    return VclPtr<SvxBulletPickTabPage>::Create(pParent, *rAttrSet);
 }
 
 bool  SvxBulletPickTabPage::FillItemSet( SfxItemSet* rSet )
@@ -422,13 +421,13 @@ void  SvxBulletPickTabPage::ActivatePage(const SfxItemSet& rSet)
     if(pActNum && *pSaveNum != *pActNum)
     {
         *pActNum = *pSaveNum;
-        m_pExamplesVS->SetNoSelection();
+        m_xExamplesVS->SetNoSelection();
     }
 
     if(pActNum && (!lcl_IsNumFmtSet(pActNum.get(), nActNumLvl) || bIsPreset))
     {
-        m_pExamplesVS->SelectItem(1);
-        NumSelectHdl_Impl(m_pExamplesVS);
+        m_xExamplesVS->SelectItem(1);
+        NumSelectHdl_Impl(m_xExamplesVS.get());
         bPreset = true;
     }
     bPreset |= bIsPreset;
@@ -468,13 +467,13 @@ void  SvxBulletPickTabPage::Reset( const SfxItemSet* rSet )
         *pActNum = *pSaveNum;
 }
 
-IMPL_LINK_NOARG(SvxBulletPickTabPage, NumSelectHdl_Impl, ValueSet*, void)
+IMPL_LINK_NOARG(SvxBulletPickTabPage, NumSelectHdl_Impl, SvtValueSet*, void)
 {
     if(pActNum)
     {
         bPreset = false;
         bModified = true;
-        sal_Unicode cChar = aBulletTypes[m_pExamplesVS->GetSelectedItemId() - 1];
+        sal_Unicode cChar = aBulletTypes[m_xExamplesVS->GetSelectedItemId() - 1];
         const vcl::Font& rActBulletFont = lcl_GetDefaultBulletFont();
 
         sal_uInt16 nMask = 1;
@@ -498,15 +497,13 @@ IMPL_LINK_NOARG(SvxBulletPickTabPage, NumSelectHdl_Impl, ValueSet*, void)
     }
 }
 
-
-IMPL_LINK_NOARG(SvxBulletPickTabPage, DoubleClickHdl_Impl, ValueSet*, void)
+IMPL_LINK_NOARG(SvxBulletPickTabPage, DoubleClickHdl_Impl, SvtValueSet*, void)
 {
-    NumSelectHdl_Impl(m_pExamplesVS);
+    NumSelectHdl_Impl(m_xExamplesVS.get());
     PushButton& rOk = GetTabDialog()->GetOKButton();
     rOk.GetClickHdl().Call(&rOk);
 }
 
-
 void SvxBulletPickTabPage::PageCreated(const SfxAllItemSet& aSet)
 {
     const SfxStringItem* pBulletCharFmt = aSet.GetItem<SfxStringItem>(SID_BULLET_CHAR_FMT, false);
diff --git a/cui/uiconfig/ui/pickbulletpage.ui b/cui/uiconfig/ui/pickbulletpage.ui
index da2a1dae0198..8070ff6fbd46 100644
--- a/cui/uiconfig/ui/pickbulletpage.ui
+++ b/cui/uiconfig/ui/pickbulletpage.ui
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.22.1 -->
 <interface domain="cui">
-  <!-- interface-requires gtk+ 3.0 -->
+  <requires lib="gtk+" version="3.0"/>
   <object class="GtkFrame" id="PickBulletPage">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
@@ -18,11 +19,29 @@
         <property name="top_padding">6</property>
         <property name="left_padding">12</property>
         <child>
-          <object class="svxlo-SvxNumValueSet" id="valueset">
+          <object class="GtkScrolledWindow" id="valuesetwin">
             <property name="visible">True</property>
-            <property name="can_focus">False</property>
+            <property name="can_focus">True</property>
             <property name="hexpand">True</property>
             <property name="vexpand">True</property>
+            <property name="hscrollbar_policy">never</property>
+            <property name="vscrollbar_policy">never</property>
+            <property name="shadow_type">in</property>
+            <child>
+              <object class="GtkViewport">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <child>
+                  <object class="GtkDrawingArea" id="valueset">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="events">GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_STRUCTURE_MASK</property>
+                    <property name="hexpand">True</property>
+                    <property name="vexpand">True</property>
+                  </object>
+                </child>
+              </object>
+            </child>
           </object>
         </child>
       </object>
diff --git a/include/svx/numvset.hxx b/include/svx/numvset.hxx
index 63eae7cd77c1..e01e9aa171a1 100644
--- a/include/svx/numvset.hxx
+++ b/include/svx/numvset.hxx
@@ -88,6 +88,44 @@ public:
             const css::lang::Locale& rLocale);
 };
 
+class SVX_DLLPUBLIC NumValueSet : public SvtValueSet
+{
+    NumberingPageType ePageType;
+    tools::Rectangle       aOrgRect;
+    VclPtr<VirtualDevice> pVDev;
+
+    css::uno::Reference<css::text::XNumberingFormatter> xFormatter;
+    css::lang::Locale aLocale;
+
+    css::uno::Sequence<
+        css::uno::Sequence<
+            css::beans::PropertyValue> > aNumSettings;
+
+    css::uno::Sequence<
+        css::uno::Reference<
+            css::container::XIndexAccess> > aOutlineSettings;
+
+public:
+    NumValueSet();
+    void init(NumberingPageType eType);
+    virtual ~NumValueSet() override;
+
+    virtual void    UserDraw( const UserDrawEvent& rUDEvt ) override;
+
+    void            SetNumberingSettings(
+        const css::uno::Sequence<
+                  css::uno::Sequence<css::beans::PropertyValue> >& aNum,
+        css::uno::Reference<css::text::XNumberingFormatter> const & xFormatter,
+        const css::lang::Locale& rLocale );
+
+    void            SetOutlineNumberingSettings(
+            css::uno::Sequence<
+                css::uno::Reference<css::container::XIndexAccess> > const & rOutline,
+            css::uno::Reference<css::text::XNumberingFormatter> const & xFormatter,
+            const css::lang::Locale& rLocale);
+};
+
+
 class SVX_DLLPUBLIC SvxBmpNumValueSet final : public SvxNumValueSet
 {
     Idle        aFormatIdle;
diff --git a/include/vcl/customweld.hxx b/include/vcl/customweld.hxx
index 167b5b97b32e..f2d079958d93 100644
--- a/include/vcl/customweld.hxx
+++ b/include/vcl/customweld.hxx
@@ -65,6 +65,7 @@ public:
     void CaptureMouse() { m_pDrawingArea->grab_add(); }
     bool IsMouseCaptured() const { return m_pDrawingArea->has_grab(); }
     void EnableRTL(bool bEnable) { m_pDrawingArea->set_direction(bEnable); }
+    bool IsRTLEnabled() const { return m_pDrawingArea->get_direction(); }
     void ReleaseMouse() { m_pDrawingArea->grab_remove(); }
     void SetHelpId(const OString& rHelpId) { m_pDrawingArea->set_help_id(rHelpId); }
     void SetAccessibleName(const OUString& rName) { m_pDrawingArea->set_accessible_name(rName); }
diff --git a/svx/source/dialog/svxbmpnumvalueset.cxx b/svx/source/dialog/svxbmpnumvalueset.cxx
index 877e5a6cdd39..aae13f758f9c 100644
--- a/svx/source/dialog/svxbmpnumvalueset.cxx
+++ b/svx/source/dialog/svxbmpnumvalueset.cxx
@@ -485,6 +485,336 @@ void SvxNumValueSet::SetOutlineNumberingSettings(
     }
 }
 
+void NumValueSet::UserDraw( const UserDrawEvent& rUDEvt )
+{
+    static const sal_uInt16 aLinesArr[] =
+    {
+        15, 10,
+        20, 30,
+        25, 50,
+        30, 70,
+        35, 90, // up to here line positions
+         5, 10, // character positions
+        10, 30,
+        15, 50,
+        20, 70,
+        25, 90,
+    };
+
+    const Color aBackColor(COL_WHITE);
+    const Color aTextColor(COL_BLACK);
+
+    vcl::RenderContext* pDev = rUDEvt.GetRenderContext();
+    tools::Rectangle aRect = rUDEvt.GetRect();
+    sal_uInt16 nItemId = rUDEvt.GetItemId();
+
+    long nRectWidth = aRect.GetWidth();
+    long nRectHeight = aRect.GetHeight();
+    Size aRectSize(nRectWidth, aRect.GetHeight());
+    Point aBLPos = aRect.TopLeft();
+    vcl::Font aOldFont = pDev->GetFont();
+    Color aOldColor = pDev->GetLineColor();
+    pDev->SetLineColor(aTextColor);
+    vcl::Font aFont(OutputDevice::GetDefaultFont(
+                DefaultFontType::UI_SANS, MsLangId::getSystemLanguage(), GetDefaultFontFlags::OnlyOne));
+
+    Size aSize = aFont.GetFontSize();
+
+    vcl::Font aRuleFont( lcl_GetDefaultBulletFont() );
+    aSize.setHeight( nRectHeight/6 );
+    aRuleFont.SetFontSize(aSize);
+    aRuleFont.SetColor(aTextColor);
+    aRuleFont.SetFillColor(aBackColor);
+    if(ePageType == NumberingPageType::BULLET)
+        aFont = aRuleFont;
+    else if(ePageType == NumberingPageType::OUTLINE)
+    {
+        aSize.setHeight( nRectHeight/8 );
+    }
+    aFont.SetColor(aTextColor);
+    aFont.SetFillColor(aBackColor);
+    aFont.SetFontSize( aSize );
+    pDev->SetFont(aFont);
+
+    if(!pVDev)
+    {
+        // The lines are only one time in the virtual device, only the outline
+        // page is currently done
+        pVDev = VclPtr<VirtualDevice>::Create(*pDev);
+        pVDev->SetMapMode(pDev->GetMapMode());
+        pVDev->EnableRTL( IsRTLEnabled() );
+         pVDev->SetOutputSize( aRectSize );
+        aOrgRect = aRect;
+        pVDev->SetFillColor( aBackColor );
+        pVDev->SetLineColor(COL_LIGHTGRAY);
+        // Draw line only once
+        if(ePageType != NumberingPageType::OUTLINE)
+        {
+            Point aStart(aBLPos.X() + nRectWidth *25 / 100,0);
+            Point aEnd(aBLPos.X() + nRectWidth * 9 / 10,0);
+            for( sal_uInt16 i = 11; i < 100; i += 33)
+            {
+                aStart.setY( aBLPos.Y() + nRectHeight  * i / 100 );
+                aEnd.setY( aStart.Y() );
+                pVDev->DrawLine(aStart, aEnd);
+                aStart.setY( aBLPos.Y() + nRectHeight  * (i + 11) / 100 );
+                aEnd.setY( aStart.Y() );
+                pVDev->DrawLine(aStart, aEnd);
+            }
+        }
+    }
+    pDev->DrawOutDev(   aRect.TopLeft(), aRectSize,
+                        aOrgRect.TopLeft(), aRectSize,
+                        *pVDev );
+    // Now comes the text
+    const OUString sValue("Value");
+    if( NumberingPageType::SINGLENUM == ePageType ||
+           NumberingPageType::BULLET == ePageType )
+    {
+        Point aStart(aBLPos.X() + nRectWidth / 9,0);
+        for( sal_uInt16 i = 0; i < 3; i++ )
+        {
+            sal_uInt16 nY = 11 + i * 33;
+            aStart.setY( aBLPos.Y() + nRectHeight  * nY / 100 );
+            OUString sText;
+            if(ePageType == NumberingPageType::BULLET)
+            {
+                sText = OUString( aBulletTypes[nItemId - 1] );
+                aStart.AdjustY( -(pDev->GetTextHeight()/2) );
+                aStart.setX( aBLPos.X() + 5 );
+            }
+            else
+            {
+                if(xFormatter.is() && aNumSettings.getLength() > nItemId - 1)
+                {
+                    Sequence<PropertyValue> aLevel = aNumSettings.getConstArray()[nItemId - 1];
+                    try
+                    {
+                        aLevel.realloc(aLevel.getLength() + 1);
+                        PropertyValue& rValue = aLevel.getArray()[aLevel.getLength() - 1];
+                        rValue.Name = sValue;
+                        rValue.Value <<= static_cast<sal_Int32>(i + 1);
+                        sText = xFormatter->makeNumberingString( aLevel, aLocale );
+                    }
+                    catch(Exception&)
+                    {
+                        OSL_FAIL("Exception in DefaultNumberingProvider::makeNumberingString");
+                    }
+                }
+                // start just next to the left edge
+                aStart.setX( aBLPos.X() + 2 );
+                aStart.AdjustY( -(pDev->GetTextHeight()/2) );
+            }
+            pDev->DrawText(aStart, sText);
+        }
+    }
+    else if(NumberingPageType::OUTLINE == ePageType )
+    {
+        // Outline numbering has to be painted into the virtual device
+        // to get correct lines
+        // has to be made again
+        pVDev->SetLineColor(aBackColor);
+        pVDev->DrawRect(aOrgRect);
+        long nStartX = aOrgRect.TopLeft().X();
+        long nStartY = aOrgRect.TopLeft().Y();
+
+        if(xFormatter.is() && aOutlineSettings.getLength() > nItemId - 1)
+        {
+            Reference<XIndexAccess> xLevel = aOutlineSettings.getArray()[nItemId - 1];
+            try
+            {
+                OUString sLevelTexts[5];
+                OUString sFontNames[5];
+                OUString sBulletChars[5];
+                sal_Int16 aNumberingTypes[5];
+                OUString sPrefixes[5];
+                OUString sSuffixes[5];
+                sal_Int16 aParentNumberings[5];
+
+                sal_Int32 nLevelCount = xLevel->getCount();
+                if(nLevelCount > 5)
+                    nLevelCount = 5;
+                for( sal_Int32 i = 0; i < nLevelCount && i < 5; i++)
+                {
+                    long nTop = nStartY + nRectHeight * (aLinesArr[2 * i + 11])/100 ;
+                    Point aLeft(nStartX + nRectWidth *  (aLinesArr[2 * i + 10])/ 100, nTop );
+
+                    Any aLevelAny = xLevel->getByIndex(i);
+                    Sequence<PropertyValue> aLevel;
+                    aLevelAny >>= aLevel;
+                    const PropertyValue* pValues = aLevel.getConstArray();
+                    aNumberingTypes[i] = 0;
+                    aParentNumberings[i] = 0;
+                    for(sal_Int32 nProperty = 0; nProperty < aLevel.getLength() - 1; nProperty++)
+                    {
+                        if ( pValues[nProperty].Name == "NumberingType" )
+                            pValues[nProperty].Value >>= aNumberingTypes[i];
+                        else if ( pValues[nProperty].Name == "BulletFontName" )
+                            pValues[nProperty].Value >>= sFontNames[i];
+                        else if ( pValues[nProperty].Name == "BulletChar" )
+                            pValues[nProperty].Value >>= sBulletChars[i];
+                        else if ( pValues[nProperty].Name == "Prefix" )
+                            pValues[nProperty].Value >>= sPrefixes[i];
+                        else if ( pValues[nProperty].Name == "Suffix" )
+                            pValues[nProperty].Value >>= sSuffixes[i];
+                        else if ( pValues[nProperty].Name == "ParentNumbering" )
+                            pValues[nProperty].Value >>= aParentNumberings[i];
+                    }
+                    Sequence< PropertyValue > aProperties(2);
+                    PropertyValue* pProperties = aProperties.getArray();
+                    pProperties[0].Name = "NumberingType";
+                    pProperties[0].Value <<= aNumberingTypes[i];
+                    pProperties[1].Name = "Value";
+                    pProperties[1].Value <<= sal_Int32(1);
+                    try
+                    {
+                        sLevelTexts[i] = xFormatter->makeNumberingString( aProperties, aLocale );
+                    }
+                    catch(Exception&)
+                    {
+                        OSL_FAIL("Exception in DefaultNumberingProvider::makeNumberingString");
+                    }
+
+                    aLeft.AdjustY( -(pDev->GetTextHeight()/2) );
+                    if(!sPrefixes[i].isEmpty() &&
+                        sPrefixes[i] != " ")
+                    {
+                        pVDev->SetFont(aFont);
+                        pVDev->DrawText(aLeft, sPrefixes[i]);
+                        aLeft.AdjustX(pDev->GetTextWidth(sPrefixes[i]) );
+                    }
+                    if(aParentNumberings[i])
+                    {
+                        //insert old numberings here
+                        sal_Int32 nStartLevel = std::min(static_cast<sal_Int32>(aParentNumberings[i]), i);
+                        for(sal_Int32 nParentLevel = i - nStartLevel; nParentLevel < i; nParentLevel++)
+                        {
+                            OUString sTmp(sLevelTexts[nParentLevel]);
+                            sTmp += ".";
+                            lcl_PaintLevel(pVDev,
+                                    aNumberingTypes[nParentLevel],
+                                    sBulletChars[nParentLevel],
+                                    sTmp,
+                                    sFontNames[nParentLevel],
+                                    aLeft,
+                                    aRuleFont,
+                                    aFont);
+                        }
+                    }
+                    lcl_PaintLevel(pVDev,
+                                    aNumberingTypes[i],
+                                    sBulletChars[i],
+                                    sLevelTexts[i],
+                                    sFontNames[i],
+                                    aLeft,
+                                    aRuleFont,
+                                    aFont);
+                    if(!sSuffixes[i].isEmpty() &&
+                       !sSuffixes[i].startsWith(" "))
+                    {
+                        pVDev->SetFont(aFont);
+                        pVDev->DrawText(aLeft, sSuffixes[i]);
+                        aLeft.AdjustX(pDev->GetTextWidth(sSuffixes[i]) );
+                    }
+
+                    long nLineTop = nStartY + nRectHeight * aLinesArr[2 * i + 1]/100 ;
+                    Point aLineLeft(aLeft.X(), nLineTop );
+                    Point aLineRight(nStartX + nRectWidth * 90 /100, nLineTop );
+                    pVDev->SetLineColor(COL_LIGHTGRAY);
+                    pVDev->DrawLine(aLineLeft,  aLineRight);
+                }
+
+            }
+#ifdef DBG_UTIL
+            catch(Exception&)
+            {
+                static bool bAssert = false;
+                if(!bAssert)
+                {
+                    OSL_FAIL("exception in ::UserDraw");
+                    bAssert = true;
+                }
+            }
+#else
+            catch(Exception&)
+            {
+            }
+#endif
+        }
+        pDev->DrawOutDev(   aRect.TopLeft(), aRectSize,
+                            aOrgRect.TopLeft(), aRectSize,
+                            *pVDev );
+    }
+
+    pDev->SetFont(aOldFont);
+    pDev->SetLineColor(aOldColor);
+}
+
+NumValueSet::NumValueSet()
+    : SvtValueSet(nullptr)
+    , ePageType(NumberingPageType::BULLET)
+    , pVDev(nullptr)
+{
+}
+
+void NumValueSet::init(NumberingPageType eType)
+{
+    ePageType = eType;
+    pVDev = nullptr;
+
+    SetColCount( 4 );
+    SetLineCount( 2 );
+    SetStyle( GetStyle() | WB_ITEMBORDER | WB_DOUBLEBORDER );
+    if(NumberingPageType::BULLET == eType)
+    {
+        for ( sal_uInt16 i = 0; i < 8; i++ )
+        {
+            InsertItem( i + 1, i );
+            SetItemText(i + 1, SvxResId(RID_SVXSTR_BULLET_DESCRIPTIONS[i]));
+        }
+    }
+}
+
+NumValueSet::~NumValueSet()
+{
+}
+
+void NumValueSet::SetNumberingSettings(
+    const Sequence<Sequence<PropertyValue> >& aNum,
+    Reference<XNumberingFormatter> const & xFormat,
+    const Locale& rLocale   )
+{
+    aNumSettings = aNum;
+    xFormatter = xFormat;
+    aLocale = rLocale;
+    if(aNum.getLength() > 8)
+            SetStyle( GetStyle()|WB_VSCROLL);
+    for ( sal_Int32 i = 0; i < aNum.getLength(); i++ )
+    {
+            InsertItem( i + 1, i );
+            if( i < 8 )
+                SetItemText(i + 1, SvxResId(RID_SVXSTR_SINGLENUM_DESCRIPTIONS[i]));
+    }
+}
+
+void NumValueSet::SetOutlineNumberingSettings(
+            Sequence<Reference<XIndexAccess> > const & rOutline,
+            Reference<XNumberingFormatter> const & xFormat,
+            const Locale& rLocale)
+{
+    aOutlineSettings = rOutline;
+    xFormatter = xFormat;
+    aLocale = rLocale;
+    if(aOutlineSettings.getLength() > 8)
+        SetStyle( GetStyle() | WB_VSCROLL );
+    for ( sal_Int32 i = 0; i < aOutlineSettings.getLength(); i++ )
+    {
+        InsertItem( i + 1, i );
+        if( i < 8 )
+            SetItemText(i + 1, SvxResId(RID_SVXSTR_OUTLINENUM_DESCRIPTIONS[i]));
+    }
+}
+
 SvxBmpNumValueSet::SvxBmpNumValueSet(vcl::Window* pParent, WinBits nWinBits)
     : SvxNumValueSet(pParent, nWinBits)
     , aFormatIdle("SvxBmpNumValueSet FormatIdle")


More information about the Libreoffice-commits mailing list