[Libreoffice-commits] .: 2 commits - sw/inc sw/source

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Mon Aug 27 08:28:11 PDT 2012


 sw/inc/swabstdlg.hxx                     |    1 
 sw/source/core/txtnode/txtedt.cxx        |   81 +++++++++++++++++--------------
 sw/source/ui/dialog/swdlgfact.cxx        |    4 +
 sw/source/ui/dialog/swdlgfact.hxx        |    1 
 sw/source/ui/dialog/wordcountdialog.cxx  |    5 +
 sw/source/ui/dialog/wordcountwrapper.cxx |    5 +
 sw/source/ui/inc/wordcountdialog.hxx     |    3 +
 sw/source/ui/uiview/view2.cxx            |    5 +
 8 files changed, 69 insertions(+), 36 deletions(-)

New commits:
commit 5192468dd49f5e1d821239cd51cea42f8bac7a4b
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Mon Aug 27 16:05:11 2012 +0100

    Related: fdo#51908 reuse the status bar word counts for the dialog
    
    Set the counts directly on the word count dialog when we have them
    precalculated from updating the status bar
    
    Change-Id: Idd64f20097af661dd4938af7fcc8506eca076e9c

diff --git a/sw/inc/swabstdlg.hxx b/sw/inc/swabstdlg.hxx
index 2962991..016202c 100644
--- a/sw/inc/swabstdlg.hxx
+++ b/sw/inc/swabstdlg.hxx
@@ -203,6 +203,7 @@ class AbstractSwWordCountFloatDlg : public VclAbstractDialog
 {
 public:
     virtual void        UpdateCounts() = 0;
+    virtual void        SetCounts(const SwDocStat &rCurrCnt, const SwDocStat &rDocStat) = 0;
     virtual Window *    GetWindow() = 0; //this method is added for return a Window type pointer
 };
 
diff --git a/sw/source/ui/dialog/swdlgfact.cxx b/sw/source/ui/dialog/swdlgfact.cxx
index f7c81aa..868b487 100644
--- a/sw/source/ui/dialog/swdlgfact.cxx
+++ b/sw/source/ui/dialog/swdlgfact.cxx
@@ -571,6 +571,10 @@ void AbstractSwWordCountFloatDlg_Impl::UpdateCounts()
     pDlg->UpdateCounts();
 }
 
+void AbstractSwWordCountFloatDlg_Impl::SetCounts(const SwDocStat &rCurrCnt, const SwDocStat &rDocStat)
+{
+    pDlg->SetCounts(rCurrCnt, rDocStat);
+}
 
 AbstractMailMergeWizard_Impl::~AbstractMailMergeWizard_Impl()
 {
diff --git a/sw/source/ui/dialog/swdlgfact.hxx b/sw/source/ui/dialog/swdlgfact.hxx
index f4a24da..159f6e3 100644
--- a/sw/source/ui/dialog/swdlgfact.hxx
+++ b/sw/source/ui/dialog/swdlgfact.hxx
@@ -79,6 +79,7 @@ class AbstractSwWordCountFloatDlg_Impl : public AbstractSwWordCountFloatDlg
 {
     DECL_ABSTDLG_BASE(AbstractSwWordCountFloatDlg_Impl,SwWordCountFloatDlg)
     virtual void                UpdateCounts();
+    virtual void                SetCounts(const SwDocStat &rCurrCnt, const SwDocStat &rDocStat);
     virtual Window *            GetWindow(); //this method is added for return a Window type pointer
 };
 
diff --git a/sw/source/ui/dialog/wordcountdialog.cxx b/sw/source/ui/dialog/wordcountdialog.cxx
index c34c197..122d542 100644
--- a/sw/source/ui/dialog/wordcountdialog.cxx
+++ b/sw/source/ui/dialog/wordcountdialog.cxx
@@ -133,4 +133,9 @@ void SwWordCountFloatDlg::UpdateCounts()
     aDlg.SetValues(aCurrCnt, aDocStat);
 }
 
+void SwWordCountFloatDlg::SetCounts(const SwDocStat &rCurrCnt, const SwDocStat &rDocStat)
+{
+    aDlg.SetValues(rCurrCnt, rDocStat);
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/ui/dialog/wordcountwrapper.cxx b/sw/source/ui/dialog/wordcountwrapper.cxx
index aaca02d..2fb4b8d 100644
--- a/sw/source/ui/dialog/wordcountwrapper.cxx
+++ b/sw/source/ui/dialog/wordcountwrapper.cxx
@@ -58,3 +58,8 @@ void SwWordCountWrapper::UpdateCounts()
 {
     pAbstDlg->UpdateCounts();
 }
+
+void SwWordCountWrapper::SetCounts(const SwDocStat &rCurrCnt, const SwDocStat &rDocStat)
+{
+    pAbstDlg->SetCounts(rCurrCnt, rDocStat);
+}
diff --git a/sw/source/ui/inc/wordcountdialog.hxx b/sw/source/ui/inc/wordcountdialog.hxx
index 1960072..f70c6a8 100644
--- a/sw/source/ui/inc/wordcountdialog.hxx
+++ b/sw/source/ui/inc/wordcountdialog.hxx
@@ -78,6 +78,8 @@ class SwWordCountFloatDlg : public SfxModelessDialog
                              Window *pParent,
                              SfxChildWinInfo* pInfo);
     void    UpdateCounts();
+
+    void    SetCounts(const SwDocStat &rCurrCnt, const SwDocStat &rDocStat);
 };
 
 class SwWordCountWrapper : public SfxChildWindow
@@ -93,6 +95,7 @@ protected:
 
 public:
     void    UpdateCounts();
+    void    SetCounts(const SwDocStat &rCurrCnt, const SwDocStat &rDocStat);
 };
 
 #endif
diff --git a/sw/source/ui/uiview/view2.cxx b/sw/source/ui/uiview/view2.cxx
index 7dfbe02..770866a 100644
--- a/sw/source/ui/uiview/view2.cxx
+++ b/sw/source/ui/uiview/view2.cxx
@@ -140,6 +140,7 @@
 #include <svx/ofaitem.hxx>
 #include <unomid.h>
 #include <docstat.hxx>
+#include <wordcountdialog.hxx>
 
 const char sStatusDelim[] = " : ";
 const char sStatusComma[] = " , ";//#outlinelevel, define a Variable for "," add by zhaojianwei
@@ -1215,6 +1216,10 @@ void SwView::StateStatusLine(SfxItemSet &rSet)
                     wordCount = wordCount.replaceAll("$2", rtl::OUString::valueOf(static_cast<sal_Int64>(selectionStats.nWord)));
                 }
                 rSet.Put(SfxStringItem(FN_STAT_WORDCOUNT, wordCount));
+
+                SwWordCountWrapper *pWrdCnt = (SwWordCountWrapper*)GetViewFrame()->GetChildWindow(SwWordCountWrapper::GetChildWindowId());
+                if (pWrdCnt)
+                    pWrdCnt->SetCounts(selectionStats, documentStats);
             }
             break;
 
commit a59b51a683a21a44e9071e878addc6a7ace3b5a8
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Mon Aug 27 12:41:19 2012 +0100

    Resolves: fdo#51908 count empty paragraphs if they're numbered
    
    we want to count the numbering/bullet of otherwise empty paragraphs
    
    Change-Id: I6cdf5348bcbb97081afc743d24e6c4ffb355d085

diff --git a/sw/source/core/txtnode/txtedt.cxx b/sw/source/core/txtnode/txtedt.cxx
index ca3b961..e37dada 100644
--- a/sw/source/core/txtnode/txtedt.cxx
+++ b/sw/source/core/txtnode/txtedt.cxx
@@ -1822,28 +1822,43 @@ void SwTxtNode::ReplaceTextOnly( xub_StrLen nPos, xub_StrLen nLen,
 void SwTxtNode::CountWords( SwDocStat& rStat,
                             xub_StrLen nStt, xub_StrLen nEnd ) const
 {
+    if( nStt > nEnd )
+    {   // bad call
+        return;
+    }
     if (IsInRedlines())
     {   //not counting txtnodes used to hold deleted redline content
         return;
     }
-
-    sal_Bool isCountAll = ( (0 == nStt) && (GetTxt().Len() == nEnd) );
-
+    bool bCountAll = ( (0 == nStt) && (GetTxt().Len() == nEnd) );
     ++rStat.nAllPara; // #i93174#: count _all_ paragraphs
-    if( nStt >= nEnd )
-    {   // empty node or empty selection or bad call
-        return;
-    }
     if ( IsHidden() )
     {   // not counting hidden paras
         return;
     }
+    // count words in numbering string if started at beginning of para:
+    bool bCountNumbering = nStt == 0;
+    bool bHasBullet = false, bHasNumbering = false;
+    rtl::OUString sNumString;
+    if (bCountNumbering)
+    {
+        sNumString = GetNumString();
+        bHasNumbering = !sNumString.isEmpty();
+        if (!bHasNumbering)
+            bHasBullet = HasBullet();
+        bCountNumbering = bHasNumbering || bHasBullet;
+    }
+
+    if( nStt == nEnd && !bCountNumbering)
+    {   // unnumbered empty node or empty selection
+        return;
+    }
 
     // count of non-empty paras
     ++rStat.nPara;
 
     // Shortcut when counting whole paragraph and current count is clean
-    if ( isCountAll && !IsWordCountDirty() )
+    if ( bCountAll && !IsWordCountDirty() )
     {
         // accumulate into DocStat record to return the values
         rStat.nWord += GetParaNumberOfWords();
@@ -1861,7 +1876,7 @@ void SwTxtNode::CountWords( SwDocStat& rStat,
     const sal_uInt32 nExpandBegin = aConversionMap.ConvertToViewPosition( nStt );
     const sal_uInt32 nExpandEnd   = aConversionMap.ConvertToViewPosition( nEnd );
 
-    if ( aExpandText.isEmpty() )
+    if (aExpandText.isEmpty() && !bCountNumbering)
     {
         OSL_ENSURE(aExpandText.getLength() >= 0, "Node text expansion error: length < 0." );
         return;
@@ -1877,7 +1892,7 @@ void SwTxtNode::CountWords( SwDocStat& rStat,
     sal_uInt32 nTmpCharsExcludingSpaces = 0;  // all non-white chars
 
     // count words in masked and expanded text:
-    if( pBreakIt->GetBreakIter().is() )
+    if (!aExpandText.isEmpty() && pBreakIt->GetBreakIter().is())
     {
         // zero is NULL for pLanguage -----------v               last param = true for clipping
         SwScanner aScanner( *this, aExpandText, 0, aConversionMap, i18n::WordType::WORD_COUNT,
@@ -1905,41 +1920,35 @@ void SwTxtNode::CountWords( SwDocStat& rStat,
     // no nTmpCharsExcludingSpaces adjust needed neither for blanked out MaskedChars
     // nor for mid-word selection - set scanner bClip = true at creation
 
-    // count words in numbering string if started at beginning of para:
-    if ( nStt == 0 )
+    // count outline number label - ? no expansion into map
+    // always counts all of number-ish label
+    if (bHasNumbering) // count words in numbering string
     {
-        // count outline number label - ? no expansion into map
-        // always counts all of number-ish label
-        const String aNumString = GetNumString();
-        const xub_StrLen nNumStringLen = aNumString.Len();
-        if ( nNumStringLen > 0 )
-        {
-            LanguageType aLanguage = GetLang( 0 );
+        LanguageType aLanguage = GetLang( 0 );
 
-            SwScanner aScanner( *this, aNumString, &aLanguage, ModelToViewHelper(),
-                                i18n::WordType::WORD_COUNT, 0, nNumStringLen, true );
+        SwScanner aScanner( *this, sNumString, &aLanguage, ModelToViewHelper(),
+                            i18n::WordType::WORD_COUNT, 0, sNumString.getLength(), true );
 
-            while ( aScanner.NextWord() )
-            {
-                ++nTmpWords;
-                const rtl::OUString &rWord = aScanner.GetWord();
-                if (pBreakIt->GetBreakIter()->getScriptType(rWord, 0) == i18n::ScriptType::ASIAN)
-                    ++nTmpAsianWords;
-                nTmpCharsExcludingSpaces += pBreakIt->getGraphemeCount(rWord);
-            }
-
-            nTmpChars += pBreakIt->getGraphemeCount(aNumString);
-        }
-        else if ( HasBullet() )
+        while ( aScanner.NextWord() )
         {
             ++nTmpWords;
-            ++nTmpChars;
-            ++nTmpCharsExcludingSpaces;
+            const rtl::OUString &rWord = aScanner.GetWord();
+            if (pBreakIt->GetBreakIter()->getScriptType(rWord, 0) == i18n::ScriptType::ASIAN)
+                ++nTmpAsianWords;
+            nTmpCharsExcludingSpaces += pBreakIt->getGraphemeCount(rWord);
         }
+
+        nTmpChars += pBreakIt->getGraphemeCount(sNumString);
+    }
+    else if ( bHasBullet )
+    {
+        ++nTmpWords;
+        ++nTmpChars;
+        ++nTmpCharsExcludingSpaces;
     }
 
     // If counting the whole para then update cached values and mark clean
-    if ( isCountAll )
+    if ( bCountAll )
     {
         SetParaNumberOfWords( nTmpWords );
         SetParaNumberOfAsianWords( nTmpAsianWords );


More information about the Libreoffice-commits mailing list