[Libreoffice-commits] core.git: sw/source sw/uiconfig

Susobhan Ghosh susobhang70 at gmail.com
Mon Jun 6 10:10:26 UTC 2016


 sw/source/uibase/sidebar/PageFormatPanel.cxx |  165 +++++++++++++++++++++++++--
 sw/source/uibase/sidebar/PageFormatPanel.hxx |   33 ++++-
 sw/source/uibase/sidebar/SwPanelFactory.cxx  |    2 
 sw/uiconfig/swriter/ui/pageformatpanel.ui    |   35 +++++
 4 files changed, 214 insertions(+), 21 deletions(-)

New commits:
commit 8b99402338773150fc0c8c6f894eb610e056d79e
Author: Susobhan Ghosh <susobhang70 at gmail.com>
Date:   Wed May 25 09:43:31 2016 +0530

    tdf#83830: Page Format Panel
    
    Change-Id: I16d263f07eb49eaa32a161958b48f4059fffafdf
    Reviewed-on: https://gerrit.libreoffice.org/25530
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Katarina Behrens <Katarina.Behrens at cib.de>
    Tested-by: Katarina Behrens <Katarina.Behrens at cib.de>

diff --git a/sw/source/uibase/sidebar/PageFormatPanel.cxx b/sw/source/uibase/sidebar/PageFormatPanel.cxx
index 5af1159..46c92c2 100644
--- a/sw/source/uibase/sidebar/PageFormatPanel.cxx
+++ b/sw/source/uibase/sidebar/PageFormatPanel.cxx
@@ -34,31 +34,43 @@
 #include <com/sun/star/frame/XController.hpp>
 #include <com/sun/star/frame/XModel.hpp>
 #include <com/sun/star/document/XUndoManagerSupplier.hpp>
+#include <svtools/unitconv.hxx>
+#include <svtools/optionsdrawinglayer.hxx>
 
 namespace sw { namespace sidebar{
 
 VclPtr<vcl::Window> PageFormatPanel::Create(
     vcl::Window* pParent,
-    const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rxFrame)
+    const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rxFrame,
+    SfxBindings* pBindings)
 {
     if( pParent == nullptr )
         throw ::com::sun::star::lang::IllegalArgumentException("no parent window given to PageFormatPanel::Create", nullptr, 0);
     if( !rxFrame.is() )
         throw ::com::sun::star::lang::IllegalArgumentException("no XFrame given to PageFormatPanel::Create", nullptr, 0);
 
-    return VclPtr<PageFormatPanel>::Create(pParent, rxFrame);
+    return VclPtr<PageFormatPanel>::Create(pParent, rxFrame, pBindings);
 }
 
 PageFormatPanel::PageFormatPanel(
     vcl::Window* pParent,
-    const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rxFrame
-    ) :
-    PanelLayout(pParent, "PageFormatPanel", "modules/swriter/ui/pageformatpanel.ui", rxFrame)
+    const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rxFrame,
+    SfxBindings* pBindings) :
+    PanelLayout(pParent, "PageFormatPanel", "modules/swriter/ui/pageformatpanel.ui", rxFrame),
+    mpBindings( pBindings ),
+    maPaperSizeController(SID_ATTR_PAGE_SIZE, *pBindings, *this),
+    maPaperOrientationController(SID_ATTR_PAGE, *pBindings, *this),
+    maMetricController(SID_ATTR_METRIC, *pBindings,*this),
+    mpPageItem( new SvxPageItem(SID_ATTR_PAGE) ),
+    meFUnit(GetModuleFieldUnit()),
+    meLastFUnit(GetModuleFieldUnit()),
+    meUnit()
 {
-    get(mpPaperSizeLB, "papersize");
+    get(mpPaperSizeBox, "papersize");
     get(mpPaperWidth, "paperwidth");
     get(mpPaperHeight, "paperheight");
     get(mpPaperOrientation, "paperorientation");
+    Initialize();
 }
 
 PageFormatPanel::~PageFormatPanel()
@@ -68,21 +80,152 @@ PageFormatPanel::~PageFormatPanel()
 
 void PageFormatPanel::dispose()
 {
-    mpPaperSizeLB.disposeAndClear();
+    mpPaperSizeBox.disposeAndClear();
     mpPaperWidth.disposeAndClear();
     mpPaperHeight.disposeAndClear();
     mpPaperOrientation.disposeAndClear();
 
+    maMetricController.dispose();
+    maPaperOrientationController.dispose();
+    maPaperSizeController.dispose();
+    mpPageItem.reset();
+
     PanelLayout::dispose();
 }
 
+void PageFormatPanel::Initialize()
+{
+    mpPaperSizeBox->FillPaperSizeEntries( PaperSizeStd );
+    mpPaperSizeBox->SetDropDownLineCount(6);
+    meUnit = maPaperSizeController.GetCoreMetric();
+    SetFieldUnit( *mpPaperWidth, meFUnit );
+    SetFieldUnit( *mpPaperHeight, meFUnit );
+
+    const SvtOptionsDrawinglayer aDrawinglayerOpt;
+    mpPaperWidth->SetMax(mpPaperWidth->Normalize(aDrawinglayerOpt.GetMaximumPaperWidth()), FUNIT_CM);
+    mpPaperWidth->SetLast(mpPaperWidth->Normalize(aDrawinglayerOpt.GetMaximumPaperWidth()), FUNIT_CM);
+    mpPaperHeight->SetMax(mpPaperHeight->Normalize(aDrawinglayerOpt.GetMaximumPaperHeight()), FUNIT_CM);
+    mpPaperHeight->SetLast(mpPaperHeight->Normalize(aDrawinglayerOpt.GetMaximumPaperHeight()), FUNIT_CM);
+
+    mpPaperSizeBox->SetSelectHdl( LINK(this, PageFormatPanel, PaperFormatModifyHdl ));
+    mpPaperOrientation->SetSelectHdl( LINK(this, PageFormatPanel, PaperFormatModifyHdl ));
+    mpPaperHeight->SetModifyHdl( LINK(this, PageFormatPanel, PaperSizeModifyHdl ));
+    mpPaperWidth->SetModifyHdl( LINK(this, PageFormatPanel, PaperSizeModifyHdl ));
+
+    mpBindings->Update(SID_ATTR_METRIC);
+    mpBindings->Update(SID_ATTR_PAGE);
+    mpBindings->Update(SID_ATTR_PAGE_SIZE);
+}
+
 void PageFormatPanel::NotifyItemUpdate(
-    const sal_uInt16 /*nSid*/,
-    const SfxItemState /*eState*/,
-    const SfxPoolItem* /*pState*/,
-    const bool /*bIsEnabled*/)
+    const sal_uInt16 nSId,
+    const SfxItemState eState,
+    const SfxPoolItem* pState,
+    const bool bIsEnabled)
 {
+    (void)bIsEnabled;
+
+    switch(nSId)
+    {
+        case SID_ATTR_PAGE_SIZE:
+        {
+            const SvxSizeItem* pSizeItem = nullptr;
+            if (eState >= SfxItemState::DEFAULT)
+                pSizeItem = dynamic_cast< const SvxSizeItem* >(pState);
+            if (pSizeItem)
+            {
+                Size aPaperSize = pSizeItem->GetSize();
+
+                mpPaperWidth->SetValue( mpPaperWidth->Normalize( aPaperSize.Width() ), FUNIT_TWIP );
+                mpPaperHeight->SetValue( mpPaperHeight->Normalize( aPaperSize.Height() ), FUNIT_TWIP );
+
+                if(mpPaperOrientation->GetSelectEntryPos() == 1)
+                   Swap(aPaperSize);
+
+                Paper ePaper = SvxPaperInfo::GetSvxPaper(aPaperSize, static_cast<MapUnit>(meUnit),true);
+                mpPaperSizeBox->SetSelection( ePaper );
+            }
+        }
+        break;
+        case SID_ATTR_METRIC:
+        {
+            meUnit = maPaperSizeController.GetCoreMetric();
+            meFUnit = GetCurrentUnit(eState, pState);
+            if(meFUnit != meLastFUnit)
+            {
+                SetFieldUnit( *mpPaperHeight, meFUnit );
+                SetFieldUnit( *mpPaperWidth, meFUnit );
+            }
+            meLastFUnit = meFUnit;
+        }
+        break;
+        case SID_ATTR_PAGE:
+        {
+            if ( eState >= SfxItemState::DEFAULT &&
+                pState && dynamic_cast< const SvxPageItem *>( pState ) !=  nullptr )
+            {
+                mpPageItem.reset( static_cast<SvxPageItem*>(pState->Clone()) );
+                if ( mpPageItem->IsLandscape() )
+                    mpPaperOrientation->SelectEntryPos(1);
+                else
+                    mpPaperOrientation->SelectEntryPos(0);
+            }
+        }
+        break;
+        default:
+            break;
+    }
+}
+
+IMPL_LINK_NOARG_TYPED(PageFormatPanel, PaperFormatModifyHdl, ListBox&, void)
+{
+    Paper ePaper = mpPaperSizeBox->GetSelection();
+    Size  aSize(SvxPaperInfo::GetPaperSize(ePaper, (MapUnit)(meUnit)));
+
+    if(mpPaperOrientation->GetSelectEntryPos() == 1)
+        Swap(aSize);
+
+    mpPageItem->SetLandscape(mpPaperOrientation->GetSelectEntryPos() == 1);
+    SvxSizeItem aSizeItem(SID_ATTR_PAGE_SIZE, aSize);
+    mpBindings->GetDispatcher()->ExecuteList(SID_ATTR_PAGE_SIZE, SfxCallMode::RECORD, { &aSizeItem, mpPageItem.get() });
+}
+
+IMPL_LINK_NOARG_TYPED(PageFormatPanel, PaperSizeModifyHdl, Edit&, void)
+{
+    Size aSize( GetCoreValue( *mpPaperWidth, meUnit ), GetCoreValue( *mpPaperHeight, meUnit));
+    SvxSizeItem aSizeItem(SID_ATTR_PAGE_SIZE, aSize);
+    mpBindings->GetDispatcher()->ExecuteList(SID_ATTR_PAGE_SIZE, SfxCallMode::RECORD, { &aSizeItem });
+}
+
+FieldUnit PageFormatPanel::GetCurrentUnit( SfxItemState eState, const SfxPoolItem* pState )
+{
+    FieldUnit eUnit = FUNIT_NONE;
+
+    if ( pState && eState >= SfxItemState::DEFAULT )
+        eUnit = (FieldUnit) static_cast<const SfxUInt16Item*>(pState)->GetValue();
+    else
+    {
+        SfxViewFrame* pFrame = SfxViewFrame::Current();
+        SfxObjectShell* pSh = nullptr;
+        if ( pFrame )
+            pSh = pFrame->GetObjectShell();
+        if ( pSh )
+        {
+            SfxModule* pModule = pSh->GetModule();
+            if ( pModule )
+            {
+                const SfxPoolItem* pItem = pModule->GetItem( SID_ATTR_METRIC );
+                if ( pItem )
+                    eUnit = (FieldUnit) static_cast<const SfxUInt16Item*>(pItem)->GetValue();
+            }
+            else
+            {
+                SAL_WARN("sw.sidebar", "GetModuleFieldUnit(): no module found");
+            }
+        }
+    }
 
+    return eUnit;
 }
 
 } }
diff --git a/sw/source/uibase/sidebar/PageFormatPanel.hxx b/sw/source/uibase/sidebar/PageFormatPanel.hxx
index 0b4b400..e266d96 100644
--- a/sw/source/uibase/sidebar/PageFormatPanel.hxx
+++ b/sw/source/uibase/sidebar/PageFormatPanel.hxx
@@ -31,6 +31,7 @@
 
 #include <svx/pageitem.hxx>
 #include <svx/rulritem.hxx>
+#include <svx/papersizelistbox.hxx>
 #include <editeng/sizeitem.hxx>
 
 #include <vcl/ctrl.hxx>
@@ -43,6 +44,9 @@
 #include <tools/fldunit.hxx>
 #include <svl/poolitem.hxx>
 #include <svx/rulritem.hxx>
+#include <svx/relfld.hxx>
+
+#include <vector>
 
 namespace sw { namespace sidebar {
 
@@ -53,7 +57,8 @@ class PageFormatPanel:
 public:
     static VclPtr<vcl::Window> Create(
         vcl::Window* pParent,
-        const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rxFrame);
+        const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rxFrame,
+        SfxBindings* pBindings);
 
     virtual void NotifyItemUpdate(
         const sal_uInt16 nSId,
@@ -63,16 +68,34 @@ public:
 
     PageFormatPanel(
         vcl::Window* pParent,
-        const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rxFrame);
+        const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rxFrame,
+        SfxBindings* pBindings);
     virtual ~PageFormatPanel();
     virtual void dispose() override;
 
+    static FieldUnit GetCurrentUnit( SfxItemState eState, const SfxPoolItem* pState );
+
 private:
 
-    VclPtr<ListBox> mpPaperSizeLB;
-    VclPtr<MetricField> mpPaperWidth;
-    VclPtr<MetricField> mpPaperHeight;
+    SfxBindings* mpBindings;
+
+    VclPtr<PaperSizeListBox> mpPaperSizeBox;
+    VclPtr<SvxRelativeField> mpPaperWidth;
+    VclPtr<SvxRelativeField> mpPaperHeight;
     VclPtr<ListBox> mpPaperOrientation;
+
+    ::sfx2::sidebar::ControllerItem maPaperSizeController;
+    ::sfx2::sidebar::ControllerItem maPaperOrientationController;
+    ::sfx2::sidebar::ControllerItem maMetricController;
+
+    ::std::unique_ptr<SvxPageItem> mpPageItem;
+
+    FieldUnit meFUnit, meLastFUnit;
+    SfxMapUnit meUnit;
+
+    void Initialize();
+    DECL_LINK_TYPED(PaperFormatModifyHdl, ListBox&, void);
+    DECL_LINK_TYPED(PaperSizeModifyHdl, Edit&, void);
 };
 
 } } //end of namespace sw::sidebar
diff --git a/sw/source/uibase/sidebar/SwPanelFactory.cxx b/sw/source/uibase/sidebar/SwPanelFactory.cxx
index 7e7c467..c89ec5d 100644
--- a/sw/source/uibase/sidebar/SwPanelFactory.cxx
+++ b/sw/source/uibase/sidebar/SwPanelFactory.cxx
@@ -154,7 +154,7 @@ Reference<ui::XUIElement> SAL_CALL SwPanelFactory::createUIElement (
     }
     else if(rsResourceURL.endsWith("/PageFormatPanel"))
     {
-        VclPtr<vcl::Window> pPanel = sw::sidebar::PageFormatPanel::Create( pParentWindow, xFrame );
+        VclPtr<vcl::Window> pPanel = sw::sidebar::PageFormatPanel::Create( pParentWindow, xFrame, pBindings );
         xElement = sfx2::sidebar::SidebarPanelBase::Create(
             rsResourceURL,
             xFrame,
diff --git a/sw/uiconfig/swriter/ui/pageformatpanel.ui b/sw/uiconfig/swriter/ui/pageformatpanel.ui
index 148030b..5d50330 100644
--- a/sw/uiconfig/swriter/ui/pageformatpanel.ui
+++ b/sw/uiconfig/swriter/ui/pageformatpanel.ui
@@ -1,7 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.18.3 -->
+<!-- Generated with glade 3.16.1 -->
 <interface>
   <requires lib="gtk+" version="3.12"/>
+  <!-- interface-requires LibreOffice 1.0 -->
   <object class="GtkGrid" id="PageFormatPanel">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
@@ -22,6 +23,8 @@
           <packing>
             <property name="left_attach">0</property>
             <property name="top_attach">0</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
           </packing>
         </child>
         <child>
@@ -33,6 +36,8 @@
           <packing>
             <property name="left_attach">0</property>
             <property name="top_attach">1</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
           </packing>
         </child>
         <child>
@@ -44,6 +49,8 @@
           <packing>
             <property name="left_attach">0</property>
             <property name="top_attach">2</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
           </packing>
         </child>
         <child>
@@ -55,28 +62,42 @@
           <packing>
             <property name="left_attach">0</property>
             <property name="top_attach">3</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
           </packing>
         </child>
         <child>
-          <object class="GtkSpinButton" id="paperwidth">
+          <object class="svxlo-SvxRelativeField" id="paperwidth">
             <property name="visible">True</property>
             <property name="can_focus">True</property>
+            <property name="has_tooltip">True</property>
+            <property name="tooltip_text" translatable="yes">Paper Width</property>
             <property name="hexpand">True</property>
+            <property name="invisible_char">•</property>
+            <property name="text">0</property>
           </object>
           <packing>
             <property name="left_attach">1</property>
             <property name="top_attach">1</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
           </packing>
         </child>
         <child>
-          <object class="GtkSpinButton" id="paperheight">
+          <object class="svxlo-SvxRelativeField" id="paperheight">
             <property name="visible">True</property>
             <property name="can_focus">True</property>
+            <property name="has_tooltip">True</property>
+            <property name="tooltip_text" translatable="yes">Paper Height</property>
             <property name="hexpand">True</property>
+            <property name="invisible_char">•</property>
+            <property name="text">0</property>
           </object>
           <packing>
             <property name="left_attach">1</property>
             <property name="top_attach">2</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
           </packing>
         </child>
         <child>
@@ -92,10 +113,12 @@
           <packing>
             <property name="left_attach">1</property>
             <property name="top_attach">3</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
           </packing>
         </child>
         <child>
-          <object class="GtkComboBoxText" id="papersize">
+          <object class="svxcorelo-PaperSizeListBox" id="papersize">
             <property name="visible">True</property>
             <property name="can_focus">False</property>
             <property name="hexpand">True</property>
@@ -103,12 +126,16 @@
           <packing>
             <property name="left_attach">1</property>
             <property name="top_attach">0</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
           </packing>
         </child>
       </object>
       <packing>
         <property name="left_attach">0</property>
         <property name="top_attach">0</property>
+        <property name="width">1</property>
+        <property name="height">1</property>
       </packing>
     </child>
   </object>


More information about the Libreoffice-commits mailing list