cui/source/inc/numfmt.hxx                          |    3 
 cui/source/tabpages/numfmt.cxx                     |   72 +++++++++++++-----
 cui/uiconfig/ui/numberingformatpage.ui             |   80 +++++++++++++++++---
 sc/source/ui/sidebar/NumberFormatPropertyPanel.cxx |   84 ++++++++++++---------
 sc/source/ui/sidebar/NumberFormatPropertyPanel.hxx |    4 +
 sc/source/ui/view/formatsh.cxx                     |    4 -
 sc/uiconfig/scalc/ui/sidebarnumberformat.ui        |   47 +++++++++++
 svl/source/numbers/zforlist.cxx                    |   20 ++++-
 svl/source/numbers/zformat.cxx                     |   11 ++
 svl/source/numbers/zforscan.cxx                    |    5 -
 10 files changed, 263 insertions(+), 67 deletions(-)

New commits:
commit 6e44bb1b67f41dc7dbf15fe4502578a38ac59738
Author: Laurent Balland-Poirier <laurent.balland-poir...@laposte.net>
Date:   Sun Jul 17 18:20:24 2016 +0200

    Fraction Number Format: add UI/Sidebar options
    
    Enable modification of fraction number format through dialog UI:
    - negative in red
    - "Decimal places" is replaced with "Denominator places"
    - leading zeros for integer part
    - thousand separator for integer part
    
    Update: options in Sidebar
    Thousand separator works, also for ' ' as thousand separator
    
    Change-Id: I0ed2952ed9cd8afb5444b44997526e5019a5858d
    Reviewed-on: https://gerrit.libreoffice.org/27268
    Tested-by: Jenkins <c...@libreoffice.org>
    Reviewed-by: Laurent BP <laurent.balland-poir...@laposte.net>

diff --git a/cui/source/inc/numfmt.hxx b/cui/source/inc/numfmt.hxx
index 0fee236..e898068 100644
--- a/cui/source/inc/numfmt.hxx
+++ b/cui/source/inc/numfmt.hxx
@@ -101,6 +101,8 @@ private:
     VclPtr<FixedText>              m_pFtOptions;
     VclPtr<FixedText>              m_pFtDecimals;
     VclPtr<NumericField>           m_pEdDecimals;
+    VclPtr<FixedText>              m_pFtDenominator;
+    VclPtr<NumericField>           m_pEdDenominator;
     VclPtr<CheckBox>               m_pBtnNegRed;
     VclPtr<FixedText>              m_pFtLeadZeroes;
     VclPtr<NumericField>           m_pEdLeadZeroes;
@@ -137,6 +139,7 @@ private:
     void    UpdateOptions_Impl( bool bCheckCatChange );
     void    UpdateFormatListBox_Impl( bool bCat, bool bUpdateEdit );
     void    UpdateThousandEngineeringCheckBox();
+    void    UpdateDecimalsDenominatorEditBox();
     void    Obstructing();
     void    EnableBySourceFormat_Impl();
     void    SetCategory( sal_uInt16 nPos );
diff --git a/cui/source/tabpages/numfmt.cxx b/cui/source/tabpages/numfmt.cxx
index 415c4a4..51b9187 100644
--- a/cui/source/tabpages/numfmt.cxx
+++ b/cui/source/tabpages/numfmt.cxx
@@ -255,6 +255,8 @@ SvxNumberFormatTabPage::SvxNumberFormatTabPage(vcl::Window* 
pParent,
     get(m_pFtOptions, "optionsft");
     get(m_pFtDecimals, "decimalsft");
     get(m_pEdDecimals, "decimalsed");
+    get(m_pFtDenominator, "denominatorft");
+    get(m_pEdDenominator, "denominatored");
     get(m_pBtnNegRed, "negnumred");
     get(m_pFtLeadZeroes, "leadzerosft");
     get(m_pEdLeadZeroes, "leadzerosed");
@@ -300,6 +302,8 @@ void SvxNumberFormatTabPage::dispose()
     m_pFtOptions.clear();
     m_pFtDecimals.clear();
     m_pEdDecimals.clear();
+    m_pFtDenominator.clear();
+    m_pEdDenominator.clear();
     m_pBtnNegRed.clear();
     m_pFtLeadZeroes.clear();
     m_pEdLeadZeroes.clear();
@@ -344,6 +348,7 @@ void SvxNumberFormatTabPage::Init_Impl()
     Link<Edit&,void> aLink = LINK( this, SvxNumberFormatTabPage, 
OptEditHdl_Impl );
 
     m_pEdDecimals->SetModifyHdl( aLink );
+    m_pEdDenominator->SetModifyHdl( aLink );
     m_pEdLeadZeroes->SetModifyHdl( aLink );
 
     m_pBtnNegRed->SetClickHdl( LINK( this, SvxNumberFormatTabPage, 
OptClickHdl_Impl ) );
@@ -355,6 +360,7 @@ void SvxNumberFormatTabPage::Init_Impl()
     m_pIbRemove->SetClickHdl( HDL( ClickHdl_Impl ) );
     m_pIbInfo->SetClickHdl( HDL( ClickHdl_Impl ) );
     UpdateThousandEngineeringCheckBox();
+    UpdateDecimalsDenominatorEditBox();
 
     m_pEdComment->SetLoseFocusHdl( LINK( this, SvxNumberFormatTabPage, 
LostFocusHdl_Impl) );
     aResetWinTimer.SetTimeoutHdl(LINK( this, SvxNumberFormatTabPage, 
TimeHdl_Impl));
@@ -636,8 +642,10 @@ void SvxNumberFormatTabPage::Obstructing()
     m_pBtnEngineering->Disable();
     m_pFtLeadZeroes->Disable();
     m_pFtDecimals->Disable();
+    m_pFtDenominator->Disable();
     m_pEdLeadZeroes->Disable();
     m_pEdDecimals->Disable();
+    m_pEdDenominator->Disable();
     m_pFtOptions->Disable();
     m_pEdDecimals->SetText( OUString() );
     m_pEdLeadZeroes->SetText( OUString() );
@@ -673,6 +681,8 @@ void SvxNumberFormatTabPage::EnableBySourceFormat_Impl()
     m_pLbLanguage->Enable( bEnable );
     m_pFtDecimals->Enable( bEnable );
     m_pEdDecimals->Enable( bEnable );
+    m_pFtDenominator->Enable( bEnable );
+    m_pEdDenominator->Enable( bEnable );
     m_pFtLeadZeroes->Enable( bEnable );
     m_pEdLeadZeroes->Enable( bEnable );
     m_pBtnNegRed->Enable( bEnable );
@@ -962,6 +972,7 @@ void SvxNumberFormatTabPage::UpdateOptions_Impl( bool 
bCheckCatChange /*= sal_Fa
     }
 
     UpdateThousandEngineeringCheckBox();
+    UpdateDecimalsDenominatorEditBox();
     switch ( nCategory )
     {
         case CAT_SCIENTIFIC: // bThousand is for Engineering notation
@@ -978,16 +989,28 @@ void SvxNumberFormatTabPage::UpdateOptions_Impl( bool 
bCheckCatChange /*= sal_Fa
         case CAT_NUMBER:
         case CAT_PERCENT:
         case CAT_CURRENCY:
+        case CAT_FRACTION:
             m_pFtOptions->Enable();
-            m_pFtDecimals->Enable();
-            m_pEdDecimals->Enable();
+            if ( nCategory == CAT_FRACTION )
+            {
+                m_pFtDenominator->Enable();
+                m_pEdDenominator->Enable();
+            }
+            else
+            {
+                m_pFtDecimals->Enable();
+                m_pEdDecimals->Enable();
+            }
             m_pFtLeadZeroes->Enable();
             m_pEdLeadZeroes->Enable();
             m_pBtnNegRed->Enable();
             if ( nCategory == CAT_NUMBER && m_pLbFormat->GetSelectEntryPos() 
== 0 )
                 m_pEdDecimals->SetText( "" ); //General format tdf#44399
             else
-                m_pEdDecimals->SetText( OUString::number( nDecimals ) );
+                if ( nCategory == CAT_FRACTION )
+                    m_pEdDenominator->SetText( OUString::number( nDecimals ) );
+                else
+                    m_pEdDecimals->SetText( OUString::number( nDecimals ) );
             m_pEdLeadZeroes->SetText( OUString::number( nZeroes ) );
             m_pBtnNegRed->Check( bNegRed );
             if ( nCategory != CAT_SCIENTIFIC )
@@ -1003,11 +1026,12 @@ void SvxNumberFormatTabPage::UpdateOptions_Impl( bool 
bCheckCatChange /*= sal_Fa
         case CAT_DATE:
         case CAT_TIME:
         case CAT_BOOLEAN:
-        case CAT_FRACTION:
         default:
             m_pFtOptions->Disable();
             m_pFtDecimals->Disable();
             m_pEdDecimals->Disable();
+            m_pFtDenominator->Disable();
+            m_pEdDenominator->Disable();
             m_pFtLeadZeroes->Disable();
             m_pEdLeadZeroes->Disable();
             m_pBtnNegRed->Disable();
@@ -1129,18 +1153,11 @@ void SvxNumberFormatTabPage::UpdateFormatListBox_Impl
 }
 
 
-/*************************************************************************
-#*  Method:        UpdateThousandEngineeringCheckBox
-#*------------------------------------------------------------------------
-#*
-#*  Class:      SvxNumberFormatTabPage
-#*  Function:   Change visible checkbox according to category format
-#*              if scientific format "Engineering notation"
-#*              else "Thousands separator"
-#*  Input:      ---
-#*  Output:     ---
-#*
-#************************************************************************/
+/**
+ * Change visible checkbox according to category format
+ * if scientific format "Engineering notation"
+ * else "Thousands separator"
+ */
 
 void SvxNumberFormatTabPage::UpdateThousandEngineeringCheckBox()
 {
@@ -1150,6 +1167,22 @@ void 
SvxNumberFormatTabPage::UpdateThousandEngineeringCheckBox()
 }
 
 
+/**
+ * Change visible Edit box and Fixed text according to category format
+ * if fraction format "Denominator places"
+ * else "Decimal places"
+ */
+
+void SvxNumberFormatTabPage::UpdateDecimalsDenominatorEditBox()
+{
+    bool bIsFraction = m_pLbCategory->GetSelectEntryPos() == CAT_FRACTION;
+    m_pFtDecimals->Show( !bIsFraction );
+    m_pEdDecimals->Show( !bIsFraction );
+    m_pFtDenominator->Show( bIsFraction );
+    m_pEdDenominator->Show( bIsFraction );
+}
+
+
 /*************************************************************************
 #*  Handle:     DoubleClickHdl_Impl
 #*------------------------------------------------------------------------
@@ -1589,6 +1622,7 @@ void SvxNumberFormatTabPage::OptHdl_Impl( void* pOptCtrl )
 {
     if (   (pOptCtrl == m_pEdLeadZeroes)
         || (pOptCtrl == m_pEdDecimals)
+        || (pOptCtrl == m_pEdDenominator)
         || (pOptCtrl == m_pBtnNegRed)
         || (pOptCtrl == m_pBtnThousand)
         || (pOptCtrl == m_pBtnEngineering) )
@@ -1597,9 +1631,11 @@ void SvxNumberFormatTabPage::OptHdl_Impl( void* pOptCtrl 
)
         bool          bThousand  = ( m_pBtnThousand->IsVisible() && 
m_pBtnThousand->IsEnabled() && m_pBtnThousand->IsChecked() )
                                 || ( m_pBtnEngineering->IsVisible() && 
m_pBtnEngineering->IsEnabled() && m_pBtnEngineering->IsChecked() );
         bool          bNegRed    =   m_pBtnNegRed->IsEnabled() && 
m_pBtnNegRed->IsChecked();
-        sal_uInt16    nPrecision = (m_pEdDecimals->IsEnabled())
+        sal_uInt16    nPrecision = (m_pEdDecimals->IsEnabled() && 
m_pEdDecimals->IsVisible())
                                  ? (sal_uInt16)m_pEdDecimals->GetValue()
-                                 : (sal_uInt16)0;
+                                 : ( (m_pEdDenominator->IsEnabled() && 
m_pEdDenominator->IsVisible())
+                                   ? (sal_uInt16)m_pEdDenominator->GetValue()
+                                   : (sal_uInt16)0 );
         sal_uInt16    nLeadZeroes = (m_pEdLeadZeroes->IsEnabled())
                                  ? (sal_uInt16)m_pEdLeadZeroes->GetValue()
                                  : (sal_uInt16)0;
diff --git a/cui/uiconfig/ui/numberingformatpage.ui 
b/cui/uiconfig/ui/numberingformatpage.ui
index 87039b2..9308246 100644
--- a/cui/uiconfig/ui/numberingformatpage.ui
+++ b/cui/uiconfig/ui/numberingformatpage.ui
@@ -8,6 +8,11 @@
     <property name="step_increment">1</property>
     <property name="page_increment">10</property>
   </object>
+  <object class="GtkAdjustment" id="adjustment2">
+    <property name="upper">8</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">1</property>
+  </object>
   <object class="GtkImage" id="image1">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
@@ -225,11 +230,38 @@
                 <property name="row_spacing">6</property>
                 <property name="column_spacing">12</property>
                 <child>
-                  <object class="GtkSpinButton" id="decimalsed">
+                  <object class="GtkBox" id="box2">
                     <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="invisible_char">•</property>
-                    <property name="adjustment">adjustment1</property>
+                    <property name="can_focus">False</property>
+                    <property name="border_width">0</property>
+                    <property name="orientation">vertical</property>
+                    <property name="spacing">6</property>
+                    <child>
+                      <object class="GtkSpinButton" id="decimalsed">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="invisible_char">•</property>
+                        <property name="adjustment">adjustment1</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkSpinButton" id="denominatored">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="invisible_char">•</property>
+                        <property name="adjustment">adjustment2</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
                   </object>
                   <packing>
                     <property name="left_attach">1</property>
@@ -249,13 +281,43 @@
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkLabel" id="decimalsft">
+                  <object class="GtkBox" id="box3">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
-                    <property name="xalign">1</property>
-                    <property name="label" translatable="yes">_Decimal 
places:</property>
-                    <property name="use_underline">True</property>
-                    <property name="mnemonic_widget">decimalsed</property>
+                    <property name="valign">center</property>
+                    <property name="border_width">0</property>
+                    <property name="orientation">vertical</property>
+                    <property name="spacing">6</property>
+                    <child>
+                      <object class="GtkLabel" id="decimalsft">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="xalign">1</property>
+                        <property name="label" translatable="yes">_Decimal 
places:</property>
+                        <property name="use_underline">True</property>
+                        <property name="mnemonic_widget">decimalsed</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkLabel" id="denominatorft">
+                        <property name="visible">False</property>
+                        <property name="can_focus">False</property>
+                        <property name="xalign">1</property>
+                        <property name="label" translatable="yes">Den_ominator 
places:</property>
+                        <property name="use_underline">True</property>
+                        <property 
name="mnemonic_widget">denominatored</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
                   </object>
                   <packing>
                     <property name="left_attach">0</property>
diff --git a/sc/source/ui/sidebar/NumberFormatPropertyPanel.cxx 
b/sc/source/ui/sidebar/NumberFormatPropertyPanel.cxx
index 1a70f32..550ba6f 100644
--- a/sc/source/ui/sidebar/NumberFormatPropertyPanel.cxx
+++ b/sc/source/ui/sidebar/NumberFormatPropertyPanel.cxx
@@ -51,7 +51,10 @@ NumberFormatPropertyPanel::NumberFormatPropertyPanel(
 {
     get(mpLbCategory,     "category");
     get(mpTBCategory,     "numberformat");
+    get(mpFtDecimals,     "decimalplaceslabel");
     get(mpEdDecimals,     "decimalplaces");
+    get(mpFtDenominator,  "denominatorplaceslabel");
+    get(mpEdDenominator,  "denominatorplaces");
     get(mpEdLeadZeroes,   "leadingzeroes");
     get(mpBtnNegRed,      "negativenumbersred");
     get(mpBtnThousand,    "thousandseparator");
@@ -69,7 +72,10 @@ void NumberFormatPropertyPanel::dispose()
 {
     mpLbCategory.clear();
     mpTBCategory.clear();
+    mpFtDecimals.clear();
     mpEdDecimals.clear();
+    mpFtDenominator.clear();
+    mpEdDenominator.clear();
     mpEdLeadZeroes.clear();
     mpBtnNegRed.clear();
     mpBtnThousand.clear();
@@ -90,6 +96,7 @@ void NumberFormatPropertyPanel::Initialize()
     Link<Edit&,void> aLink = LINK(this, NumberFormatPropertyPanel, 
NumFormatValueHdl);
 
     mpEdDecimals->SetModifyHdl( aLink );
+    mpEdDenominator->SetModifyHdl( aLink );
     mpEdLeadZeroes->SetModifyHdl( aLink );
 
     mpBtnNegRed->SetClickHdl( LINK(this, NumberFormatPropertyPanel, 
NumFormatValueClickHdl) );
@@ -120,12 +127,14 @@ IMPL_LINK_NOARG_TYPED( NumberFormatPropertyPanel, 
NumFormatValueHdl, Edit&, void
     bool        bThousand   = ( mpBtnThousand->IsVisible() && 
mpBtnThousand->IsEnabled() && mpBtnThousand->IsChecked() )
                            || ( mpBtnEngineering->IsVisible() && 
mpBtnEngineering->IsEnabled() && mpBtnEngineering->IsChecked() );
     bool        bNegRed     =  mpBtnNegRed->IsEnabled() && 
mpBtnNegRed->IsChecked();
-    sal_uInt16  nPrecision  = (mpEdDecimals->IsEnabled())
-        ? (sal_uInt16)mpEdDecimals->GetValue()
-        : (sal_uInt16)0;
+    sal_uInt16  nPrecision  = (mpEdDecimals->IsEnabled() && 
mpEdDecimals->IsVisible())
+                            ? (sal_uInt16)mpEdDecimals->GetValue()
+                            : (mpEdDenominator->IsEnabled() && 
mpEdDenominator->IsVisible())
+                                ? (sal_uInt16)mpEdDenominator->GetValue()
+                                : (sal_uInt16)0;
     sal_uInt16  nLeadZeroes = (mpEdLeadZeroes->IsEnabled())
-        ? (sal_uInt16)mpEdLeadZeroes->GetValue()
-        : (sal_uInt16)0;
+                            ? (sal_uInt16)mpEdLeadZeroes->GetValue()
+                            : (sal_uInt16)0;
 
     OUString sThousand = OUString::number(static_cast<sal_Int32>(bThousand));
     OUString sNegRed = OUString::number(static_cast<sal_Int32>(bNegRed));
@@ -199,44 +208,34 @@ void NumberFormatPropertyPanel::NotifyItemUpdate(
                 mnCategorySelected = nVal;
                 mpLbCategory->SelectEntryPos(nVal);
                 if( nVal < 4 ||  // General, Number, Percent and Currency
-                    nVal == 6 )  // scientific also
+                    nVal == 6 || // scientific also
+                    nVal == 7 )  // fraction
                 {
-                    if ( nVal == 6 ) // scientific
-                    {  // For scientific, Thousand separator is replaced by 
Engineering notation
-                        mpBtnThousand->Hide();
-                        mpBtnEngineering->Show();
-                        mpBtnEngineering->Enable();
-                    }
-                    else
-                    {
-                        mpBtnEngineering->Hide();
-                        mpBtnThousand->Show();
-                        mpBtnThousand->Enable();
-                    }
+                    bool bIsScientific ( nVal == 6 );// For scientific, 
Thousand separator is replaced by Engineering notation
+                    bool bIsFraction ( nVal == 7 );  // For fraction, Decimal 
places is replaced by Denominator places
+                    mpBtnThousand->Show(!bIsScientific);
+                    mpBtnThousand->Enable(!bIsScientific);
+                    mpBtnEngineering->Show(bIsScientific);
+                    mpBtnEngineering->Enable(bIsScientific);
                     mpBtnNegRed->Enable();
-                    mpEdDecimals->Enable();
+                    mpFtDenominator->Show(bIsFraction);
+                    mpEdDenominator->Show(bIsFraction);
+                    mpFtDenominator->Enable(bIsFraction);
+                    mpEdDenominator->Enable(bIsFraction);
+                    mpFtDecimals->Show(!bIsFraction);
+                    mpEdDecimals->Show(!bIsFraction);
+                    mpFtDecimals->Enable(!bIsFraction);
+                    mpEdDecimals->Enable(!bIsFraction);
                     mpEdLeadZeroes->Enable();
                 }
                 else
-                {
-                    mpBtnEngineering->Hide();
-                    mpBtnThousand->Show();
-                    mpBtnThousand->Disable();
-                    mpBtnNegRed->Disable();
-                    mpEdDecimals->Disable();
-                    mpEdLeadZeroes->Disable();
-                }
+                    DisableControls();
             }
             else
             {
-                mpBtnEngineering->Hide();
-                mpBtnThousand->Show();
+                DisableControls();
                 mpLbCategory->SetNoSelection();
                 mnCategorySelected = 0;
-                mpBtnThousand->Disable();
-                mpBtnNegRed->Disable();
-                mpEdDecimals->Disable();
-                mpEdLeadZeroes->Disable();
             }
         }
         break;
@@ -277,8 +276,10 @@ void NumberFormatPropertyPanel::NotifyItemUpdate(
             mpBtnNegRed->Check(bNegRed);
             if ( mpLbCategory->GetSelectEntryPos() == 0 )
                 mpEdDecimals->SetText(""); // tdf#44399
-            else
+            else if ( mpEdDecimals->IsVisible() )
                 mpEdDecimals->SetValue(nPrecision);
+            else if ( mpEdDenominator->IsVisible() )
+                mpEdDenominator->SetValue(nPrecision);
             mpEdLeadZeroes->SetValue(nLeadZeroes);
         }
         break;
@@ -287,6 +288,21 @@ void NumberFormatPropertyPanel::NotifyItemUpdate(
     }
 }
 
+void NumberFormatPropertyPanel::DisableControls()
+{
+    mpBtnEngineering->Hide();
+    mpBtnThousand->Show();
+    mpBtnThousand->Disable();
+    mpBtnNegRed->Disable();
+    mpFtDenominator->Hide();
+    mpEdDenominator->Hide();
+    mpFtDecimals->Show();
+    mpEdDecimals->Show();
+    mpFtDecimals->Disable();
+    mpEdDecimals->Disable();
+    mpEdLeadZeroes->Disable();
+}
+
 }} // end of namespace ::sc::sidebar
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/ui/sidebar/NumberFormatPropertyPanel.hxx 
b/sc/source/ui/sidebar/NumberFormatPropertyPanel.hxx
index 7947cb7..1f9540e 100644
--- a/sc/source/ui/sidebar/NumberFormatPropertyPanel.hxx
+++ b/sc/source/ui/sidebar/NumberFormatPropertyPanel.hxx
@@ -67,7 +67,10 @@ private:
     //ui controls
     VclPtr<ListBox>                                mpLbCategory;
     VclPtr<ToolBox>                                mpTBCategory;
+    VclPtr<FixedText>                              mpFtDecimals;
     VclPtr<NumericField>                           mpEdDecimals;
+    VclPtr<FixedText>                              mpFtDenominator;
+    VclPtr<NumericField>                           mpEdDenominator;
     VclPtr<NumericField>                           mpEdLeadZeroes;
     VclPtr<CheckBox>                               mpBtnNegRed;
     VclPtr<CheckBox>                               mpBtnThousand;
@@ -86,6 +89,7 @@ private:
     DECL_LINK_TYPED(NumFormatValueClickHdl, Button*, void);
 
     void Initialize();
+    void DisableControls();
 };
 
 } } // end of namespace ::sc::sidebar
diff --git a/sc/source/ui/view/formatsh.cxx b/sc/source/ui/view/formatsh.cxx
index 3383b1d..d399687 100644
--- a/sc/source/ui/view/formatsh.cxx
+++ b/sc/source/ui/view/formatsh.cxx
@@ -1149,7 +1149,7 @@ void ScFormatShell::ExecuteNumFormat( SfxRequest& rReq )
                     eType = pEntry->GetType();
                 }
 
-                //Just use eType to judge whether the command is fired for 
NUMBER/PERCENT/CURRENCY/SCIENTIFIC
+                //Just use eType to judge whether the command is fired for 
NUMBER/PERCENT/CURRENCY/SCIENTIFIC/FRACTION
                 //In sidebar, users can fire SID_NUMBER_FORMAT command by 
operating the related UI controls before they are disable
                 switch(eType)
                 {
@@ -1162,6 +1162,8 @@ void ScFormatShell::ExecuteNumFormat( SfxRequest& rReq )
                 case 
css::util::NumberFormat::CURRENCY|css::util::NumberFormat::DEFINED:
                 case css::util::NumberFormat::SCIENTIFIC:
                 case 
css::util::NumberFormat::SCIENTIFIC|css::util::NumberFormat::DEFINED:
+                case css::util::NumberFormat::FRACTION:
+                case 
css::util::NumberFormat::FRACTION|css::util::NumberFormat::DEFINED:
                     eType = 0;
                     break;
                 default:
diff --git a/sc/uiconfig/scalc/ui/sidebarnumberformat.ui 
b/sc/uiconfig/scalc/ui/sidebarnumberformat.ui
index 6572ad2..a8875e5 100644
--- a/sc/uiconfig/scalc/ui/sidebarnumberformat.ui
+++ b/sc/uiconfig/scalc/ui/sidebarnumberformat.ui
@@ -3,6 +3,16 @@
 <interface>
   <requires lib="gtk+" version="3.0"/>
   <requires lib="LibreOffice" version="1.0"/>
+  <object class="GtkAdjustment" id="adjustment1">
+    <property name="upper">20</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">10</property>
+  </object>
+  <object class="GtkAdjustment" id="adjustment2">
+    <property name="upper">8</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">1</property>
+  </object>
   <object class="GtkGrid" id="NumberFormatPropertyPanel">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
@@ -141,6 +151,7 @@
                     <property name="tooltip_markup" translatable="yes">Enter 
the number of decimal places that you want to display.</property>
                     <property name="tooltip_text" translatable="yes">Enter the 
number of decimal places that you want to display.</property>
                     <property name="invisible_char">•</property>
+                    <property name="adjustment">adjustment1</property>
                     <child internal-child="accessible">
                       <object class="AtkObject" id="decimalplaces-atkobject">
                         <property name="AtkObject::accessible-name" 
translatable="yes">Decimal Places</property>
@@ -153,6 +164,41 @@
                     <property name="position">1</property>
                   </packing>
                 </child>
+                <child>
+                  <object class="GtkLabel" id="denominatorplaceslabel">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="label" translatable="yes">Den_ominator 
places:</property>
+                    <property name="use_underline">True</property>
+                    <property 
name="mnemonic_widget">denominatorplaces</property>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkSpinButton" id="denominatorplaces">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="has_tooltip">True</property>
+                    <property name="tooltip_markup" translatable="yes">Enter 
the number of places for the denominator that you want to display.</property>
+                    <property name="tooltip_text" translatable="yes">Enter the 
number of places for the denominator that you want to display.</property>
+                    <property name="invisible_char">•</property>
+                    <property name="adjustment">adjustment2</property>
+                    <child internal-child="accessible">
+                      <object class="AtkObject" 
id="denominatorplaces-atkobject">
+                        <property name="AtkObject::accessible-name" 
translatable="yes">Denominator Places</property>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -189,6 +235,7 @@
                     <property name="tooltip_markup" translatable="yes">Enter 
the maximum number of zeroes to display before the decimal point.</property>
                     <property name="tooltip_text" translatable="yes">Enter the 
maximum number of zeroes to display before the decimal point.</property>
                     <property name="invisible_char">•</property>
+                    <property name="adjustment">adjustment1</property>
                     <child internal-child="accessible">
                       <object class="AtkObject" id="leadingzeroes-atkobject">
                         <property name="AtkObject::accessible-name" 
translatable="yes">Leading Zeroes</property>
diff --git a/svl/source/numbers/zforlist.cxx b/svl/source/numbers/zforlist.cxx
index 5ca78ed..0eaab97 100644
--- a/svl/source/numbers/zforlist.cxx
+++ b/svl/source/numbers/zforlist.cxx
@@ -2858,7 +2858,7 @@ OUString SvNumberFormatter::GenerateFormat(sal_uInt32 
nIndex,
             }
         }
     }
-    if (nPrecision > 0)
+    if (nPrecision > 0 && eType != css::util::NumberFormat::FRACTION )
     {
         sString.append(GetNumDecimalSep());
         padToLength(sString, sString.getLength() + nPrecision, '0');
@@ -2931,6 +2931,24 @@ OUString SvNumberFormatter::GenerateFormat(sal_uInt32 
nIndex,
         }
         sString.append(sNegStr.makeStringAndClear());
     }
+    else if (eType == css::util::NumberFormat::FRACTION)
+    {
+        OUString aIntegerFractionDelimiterString = 
pFormat->GetIntegerFractionDelimiterString( 0 );
+        if ( aIntegerFractionDelimiterString == " " )
+            sString.append( aIntegerFractionDelimiterString );
+        else
+        {
+            sString.append( '"' );
+            sString.append( aIntegerFractionDelimiterString );
+            sString.append( '"' );
+        }
+        sString.append( pFormat->GetNumeratorString( 0 ) );
+        sString.append( '/' );
+        if ( nPrecision > 0 )
+            padToLength(sString, sString.getLength() + nPrecision, '?');
+        else
+            sString.append( '#' );
+    }
     if (eType != css::util::NumberFormat::CURRENCY)
     {
         bool insertBrackets = false;
diff --git a/svl/source/numbers/zformat.cxx b/svl/source/numbers/zformat.cxx
index a317547..2cd9282 100644
--- a/svl/source/numbers/zformat.cxx
+++ b/svl/source/numbers/zformat.cxx
@@ -2004,7 +2004,8 @@ OUString lcl_GetFractionIntegerString(const 
ImpSvNumberformatInfo &rInfo, sal_uI
     {
         if( rInfo.nTypeArray[i] == NF_SYMBOLTYPE_FRACBLANK )
         {
-            for( i--; i >= 0 && rInfo.nTypeArray[i] == NF_SYMBOLTYPE_DIGIT ; 
i-- )
+            for( i--; i >= 0 && ( rInfo.nTypeArray[i] == NF_SYMBOLTYPE_DIGIT
+                               || rInfo.nTypeArray[i] == NF_SYMBOLTYPE_THSEP 
); i-- )
             {
                 aIntegerString.insert( 0, rInfo.sStrArray[i] );
             }
@@ -4350,7 +4351,13 @@ void SvNumberformat::GetNumForInfo( sal_uInt16 nNumFor, 
short& rScannedType,
     const ImpSvNumberformatInfo& rInfo = NumFor[nNumFor].Info();
     rScannedType = rInfo.eScannedType;
     bThousand = rInfo.bThousand;
-    nPrecision = rInfo.nCntPost;
+    nPrecision = (rInfo.eScannedType == css::util::NumberFormat::FRACTION)
+                    ? rInfo.nCntExp  // number of denominator digits for 
fraction
+                    : rInfo.nCntPost;
+    sal_Int32 nPosHash = 1;
+    if ( rInfo.eScannedType == css::util::NumberFormat::FRACTION &&
+            ( (nPosHash += GetDenominatorString(nNumFor).indexOf('#')) > 0 ) )
+        nPrecision -= nPosHash;
     if (bStandard && rInfo.eScannedType == css::util::NumberFormat::NUMBER)
     {
         // StandardFormat
diff --git a/svl/source/numbers/zforscan.cxx b/svl/source/numbers/zforscan.cxx
index 3642e91..82971a5 100644
--- a/svl/source/numbers/zforscan.cxx
+++ b/svl/source/numbers/zforscan.cxx
@@ -1047,8 +1047,9 @@ bool 
ImpSvNumberformatScan::IsLastBlankBeforeFrac(sal_uInt16 i)
             {
                 bStop = true;
             }
-            else if ( nTypeArray[i] == NF_SYMBOLTYPE_DEL &&
-                      sStrArray[i][0] == ' ')
+            else if ( ( nTypeArray[i] == NF_SYMBOLTYPE_DEL  &&
+                        sStrArray[i][0] == ' ')             ||
+                        nTypeArray[i] == NF_SYMBOLTYPE_STRING ) // 
integer/fraction delimiter can also be a string
             {
                 res = false;
             }
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to