[PATCH] Word count dialog modeless
Matt Pratt
mattpratt.au at gmail.com
Tue Nov 1 21:47:33 PDT 2011
---
sw/Library_sw.mk | 1 +
sw/inc/swabstdlg.hxx | 12 ++++-
sw/source/ui/app/swmodule.cxx | 2 +
sw/source/ui/dialog/swdlgfact.cxx | 45 +++++++++++++++------
sw/source/ui/dialog/swdlgfact.hxx | 15 +++++--
sw/source/ui/dialog/wordcountdialog.cxx | 56 +++++++++++++++++++++++++-
sw/source/ui/dialog/wordcountdialog.hrc | 1 +
sw/source/ui/dialog/wordcountdialog.src | 12 +++++-
sw/source/ui/dialog/wordcountwrapper.cxx | 64 ++++++++++++++++++++++++++++++
sw/source/ui/docvw/edtwin.cxx | 16 +++++++
sw/source/ui/inc/wordcountdialog.hxx | 38 +++++++++++++++++-
sw/source/ui/shells/annotsh.cxx | 23 ++++-------
sw/source/ui/shells/drawsh.cxx | 22 ++++------
sw/source/ui/shells/drwtxtex.cxx | 22 ++++------
sw/source/ui/shells/frmsh.cxx | 22 ++++------
sw/source/ui/shells/textsh.cxx | 1 +
sw/source/ui/shells/textsh1.cxx | 24 ++++-------
17 files changed, 280 insertions(+), 96 deletions(-)
create mode 100644 sw/source/ui/dialog/wordcountwrapper.cxx
diff --git a/sw/Library_sw.mk b/sw/Library_sw.mk
index b2ce776..a8ee383 100644
--- a/sw/Library_sw.mk
+++ b/sw/Library_sw.mk
@@ -615,6 +615,7 @@ $(eval $(call gb_Library_add_exception_objects,sw,\
sw/source/ui/frmdlg/frmmgr \
sw/source/ui/globdoc/globdoc \
sw/source/ui/index/idxmrk \
+ sw/source/ui/dialog/wordcountwrapper \
sw/source/ui/index/toxmgr \
sw/source/ui/lingu/hhcwrp \
sw/source/ui/lingu/hyp \
diff --git a/sw/inc/swabstdlg.hxx b/sw/inc/swabstdlg.hxx
index b928169..a8fc6ef 100644
--- a/sw/inc/swabstdlg.hxx
+++ b/sw/inc/swabstdlg.hxx
@@ -200,10 +200,11 @@ public:
virtual void SetSectionData(SwSectionData const& rSect) = 0;
};
-class AbstractSwWordCountDialog : public VclAbstractDialog
+class AbstractSwWordCountFloatDlg : public VclAbstractDialog
{
public:
- virtual void SetValues(const SwDocStat& rCurrent, const SwDocStat& rDoc) = 0;
+ virtual void UpdateCounts() = 0;
+ virtual Window * GetWindow() = 0; //this method is added for return a Window type pointer
};
class AbstractSwInsertAbstractDlg : public VclAbstractDialog // add for SwInsertAbstractDlg
@@ -353,7 +354,12 @@ public:
const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& _rxFrame,
sal_uInt32 nResId
) = 0;
- virtual AbstractSwWordCountDialog* CreateSwWordCountDialog( Window* pWindow ) = 0;
+ virtual AbstractSwWordCountFloatDlg* CreateSwWordCountDialog(int nResId,
+ SfxBindings* pBindings,
+ SfxChildWindow* pChild,
+ Window *pParent,
+ SfxChildWinInfo* pInfo) = 0;
+
virtual AbstractSwInsertAbstractDlg * CreateSwInsertAbstractDlg ( Window* pParent, int nResId) = 0; // add for SwInsertAbstractDlg
virtual AbstractSwAsciiFilterDlg* CreateSwAsciiFilterDlg ( Window* pParent, SwDocShell& rDocSh,
SvStream* pStream, int nResId ) = 0;// add for SwAsciiFilterDlg
diff --git a/sw/source/ui/app/swmodule.cxx b/sw/source/ui/app/swmodule.cxx
index 4a66362..e1bdf64 100644
--- a/sw/source/ui/app/swmodule.cxx
+++ b/sw/source/ui/app/swmodule.cxx
@@ -122,6 +122,7 @@
#include <sfx2/appuno.hxx>
#include <swatrset.hxx>
#include <idxmrk.hxx>
+#include <wordcountdialog.hxx>
#include <dlelstnr.hxx>
#include <barcfg.hxx>
#include <svx/rubydialog.hxx>
@@ -397,6 +398,7 @@ void SwDLL::RegisterControls()
SwMailMergeChildWindow::RegisterChildWindow( sal_False, pMod );
SwInsertIdxMarkWrapper::RegisterChildWindow( sal_False, pMod );
SwInsertAuthMarkWrapper::RegisterChildWindow( sal_False, pMod );
+ SwWordCountWrapper::RegisterChildWindow( sal_False, pMod );
SvxRubyChildWindow::RegisterChildWindow( sal_False, pMod);
SwSpellDialogChildWindow::RegisterChildWindow(sal_False, pMod);
diff --git a/sw/source/ui/dialog/swdlgfact.cxx b/sw/source/ui/dialog/swdlgfact.cxx
index 1b5f9ad..c552833 100644
--- a/sw/source/ui/dialog/swdlgfact.cxx
+++ b/sw/source/ui/dialog/swdlgfact.cxx
@@ -112,7 +112,7 @@
using namespace ::com::sun::star;
-IMPL_ABSTDLG_BASE(AbstractSwWordCountDialog_Impl);
+IMPL_ABSTDLG_BASE(AbstractSwWordCountFloatDlg_Impl);
IMPL_ABSTDLG_BASE(AbstractSwInsertAbstractDlg_Impl);
IMPL_ABSTDLG_BASE(AbstractSfxDialog_Impl);
IMPL_ABSTDLG_BASE(AbstractSwAsciiFilterDlg_Impl);
@@ -175,11 +175,6 @@ String AbstractTabDialog_Impl::GetText() const
return pDlg->GetText();
}
-void AbstractSwWordCountDialog_Impl::SetValues(const SwDocStat& rCurrent, const SwDocStat& rDoc)
-{
- pDlg->SetValues(rCurrent, rDoc);
-}
-
sal_uInt8 AbstractSwInsertAbstractDlg_Impl::GetLevel() const
{
return pDlg->GetLevel();
@@ -572,6 +567,18 @@ Window* AbstractAuthMarkFloatDlg_Impl::GetWindow()
return (Window*)pDlg;
}
+
+Window* AbstractSwWordCountFloatDlg_Impl::GetWindow()
+{
+ return (Window*)pDlg;
+}
+
+void AbstractSwWordCountFloatDlg_Impl::UpdateCounts()
+{
+ pDlg->UpdateCounts();
+}
+
+
AbstractMailMergeWizard_Impl::~AbstractMailMergeWizard_Impl()
{
delete pDlg;
@@ -624,12 +631,6 @@ sal_uInt16 AbstractMailMergeWizard_Impl::GetRestartPage() const
return pDlg->GetRestartPage();
}
-AbstractSwWordCountDialog* SwAbstractDialogFactory_Impl::CreateSwWordCountDialog(Window* pParent)
-{
- SwWordCountDialog* pDlg = new SwWordCountDialog( pParent );
- return new AbstractSwWordCountDialog_Impl( pDlg );
-}
-
AbstractSwInsertAbstractDlg * SwAbstractDialogFactory_Impl::CreateSwInsertAbstractDlg( Window* pParent,
int nResId )
{
@@ -1546,6 +1547,26 @@ AbstractMarkFloatDlg * SwAbstractDialogFactory_Impl::CreateAuthMarkFloatDlg( int
return 0;
}
+AbstractSwWordCountFloatDlg * SwAbstractDialogFactory_Impl::CreateSwWordCountDialog( int nResId,
+ SfxBindings* pBindings,
+ SfxChildWindow* pChild,
+ Window *pParent,
+ SfxChildWinInfo* pInfo )
+{
+ SwWordCountFloatDlg* pDlg=NULL;
+ switch ( nResId )
+ {
+ case DLG_WORDCOUNT :
+ pDlg = new SwWordCountFloatDlg( pBindings, pChild, pParent, pInfo );
+ break;
+ default:
+ break;
+ }
+ if ( pDlg )
+ return new AbstractSwWordCountFloatDlg_Impl( pDlg );
+ return 0;
+}
+
//add for SwIndexMarkModalDlg begin
VclAbstractDialog * SwAbstractDialogFactory_Impl::CreateIndexMarkModalDlg( int nResId,
Window *pParent, SwWrtShell& rSh, SwTOXMark* pCurTOXMark ) //add for SwIndexMarkModalDlg
diff --git a/sw/source/ui/dialog/swdlgfact.hxx b/sw/source/ui/dialog/swdlgfact.hxx
index e13ccfd..bb3a046 100644
--- a/sw/source/ui/dialog/swdlgfact.hxx
+++ b/sw/source/ui/dialog/swdlgfact.hxx
@@ -76,11 +76,12 @@ short Class::Execute() \
return pDlg->Execute(); \
}
-
-class AbstractSwWordCountDialog_Impl : public AbstractSwWordCountDialog
+class SwWordCountFloatDlg;
+class AbstractSwWordCountFloatDlg_Impl : public AbstractSwWordCountFloatDlg
{
- DECL_ABSTDLG_BASE(AbstractSwWordCountDialog_Impl,SwWordCountDialog)
- void SetValues(const SwDocStat& rCurrent, const SwDocStat& rDoc);
+ DECL_ABSTDLG_BASE(AbstractSwWordCountFloatDlg_Impl,SwWordCountFloatDlg)
+ virtual void UpdateCounts();
+ virtual Window * GetWindow(); //this method is added for return a Window type pointer
};
//add for SwInsertAbstractDlg begin
@@ -437,7 +438,11 @@ public:
const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& _rxFrame,
sal_uInt32 nResId
);
- virtual AbstractSwWordCountDialog* CreateSwWordCountDialog(Window* pParent);
+ virtual AbstractSwWordCountFloatDlg* CreateSwWordCountDialog(int nResId,
+ SfxBindings* pBindings,
+ SfxChildWindow* pChild,
+ Window *pParent,
+ SfxChildWinInfo* pInfo);
virtual AbstractSwInsertAbstractDlg * CreateSwInsertAbstractDlg( Window* pParent,int nResId );
virtual AbstractSwAsciiFilterDlg* CreateSwAsciiFilterDlg ( Window* pParent, SwDocShell& rDocSh,
SvStream* pStream, int nResId ); //add for SwAsciiFilterDlg
diff --git a/sw/source/ui/dialog/wordcountdialog.cxx b/sw/source/ui/dialog/wordcountdialog.cxx
index 4a98a4e..2ff37ed 100644
--- a/sw/source/ui/dialog/wordcountdialog.cxx
+++ b/sw/source/ui/dialog/wordcountdialog.cxx
@@ -34,10 +34,16 @@
#include <swtypes.hxx>
#include <wordcountdialog.hxx>
#include <docstat.hxx>
-
#include <dialog.hrc>
#include <layout/layout-pre.hxx>
#include <wordcountdialog.hrc>
+#include <cmdid.h>
+#include "vcl/msgbox.hxx" // RET_CANCEL
+#include <swmodule.hxx>
+#include <wview.hxx>
+#include <sfx2/viewfrm.hxx>
+#include <swwait.hxx>
+#include <wrtsh.hxx>
#if ENABLE_LAYOUT
#undef SW_RES
@@ -49,7 +55,7 @@
#endif /* ENABLE_LAYOUT */
SwWordCountDialog::SwWordCountDialog(Window* pParent) :
- SfxModalDialog(pParent, SW_RES(DLG_WORDCOUNT)),
+ Window(pParent, SW_RES(WINDOW_DLG)),
#if defined _MSC_VER
#pragma warning (disable : 4355)
#endif
@@ -79,10 +85,23 @@ SwWordCountDialog::SwWordCountDialog(Window* pParent) :
SetHelpId (HID_DLG_WORDCOUNT);
#endif /* ENABLE_LAYOUT */
FreeResource();
+
+ aOK.SetClickHdl(LINK(this,SwWordCountDialog, OkHdl));
+}
+
+IMPL_LINK( SwWordCountDialog, OkHdl, void*, EMPTYARG )
+{
+ SfxViewFrame* pVFrame = ::GetActiveView()->GetViewFrame();
+ if (pVFrame != NULL)
+ {
+ pVFrame->ToggleChildWindow(FN_WORDCOUNT_DIALOG);
+ }
+ return 0;
}
SwWordCountDialog::~SwWordCountDialog()
{
+ ViewShell::SetCareWin( 0 );
}
void SwWordCountDialog::SetValues(const SwDocStat& rCurrent, const SwDocStat& rDoc)
@@ -95,4 +114,37 @@ void SwWordCountDialog::SetValues(const SwDocStat& rCurrent, const SwDocStat& r
aDocCharacterExcludingSpacesFI.SetText( String::CreateFromInt32(rDoc.nCharExcludingSpaces ));
}
+
+SwWordCountFloatDlg::SwWordCountFloatDlg(SfxBindings* _pBindings,
+ SfxChildWindow* pChild,
+ Window *pParent,
+ SfxChildWinInfo* pInfo)
+ : SfxModelessDialog(_pBindings, pChild, pParent, SW_RES(DLG_WORDCOUNT)),
+ aDlg(this)
+{
+ FreeResource();
+ Initialize(pInfo);
+}
+
+void SwWordCountFloatDlg::Activate()
+{
+ SfxModelessDialog::Activate();
+ aDlg.Activate();
+}
+
+void SwWordCountFloatDlg::UpdateCounts()
+{
+ SwWrtShell &rSh = ::GetActiveView()->GetWrtShell();
+ SwDocStat aCurrCnt;
+ SwDocStat aDocStat;
+ {
+ SwWait aWait( *::GetActiveView()->GetDocShell(), sal_True );
+ rSh.StartAction();
+ rSh.CountWords( aCurrCnt );
+ aDocStat = rSh.GetUpdatedDocStat();
+ rSh.EndAction();
+ }
+ aDlg.SetValues(aCurrCnt, aDocStat);
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/ui/dialog/wordcountdialog.hrc b/sw/source/ui/dialog/wordcountdialog.hrc
index af6f3a7..0db5c87 100644
--- a/sw/source/ui/dialog/wordcountdialog.hrc
+++ b/sw/source/ui/dialog/wordcountdialog.hrc
@@ -43,5 +43,6 @@
#define FL_BOTTOM 15
#define PB_OK 16
#define PB_HELP 17
+#define WINDOW_DLG 18
#endif
diff --git a/sw/source/ui/dialog/wordcountdialog.src b/sw/source/ui/dialog/wordcountdialog.src
index 767913a..a324c45 100644
--- a/sw/source/ui/dialog/wordcountdialog.src
+++ b/sw/source/ui/dialog/wordcountdialog.src
@@ -27,7 +27,7 @@
#include <helpid.h>
#include <dialog.hrc>
#include <wordcountdialog.hrc>
-ModalDialog DLG_WORDCOUNT
+ModelessDialog DLG_WORDCOUNT
{
HelpID = HID_DLG_WORDCOUNT ;
OutputSize = TRUE ;
@@ -36,6 +36,15 @@ ModalDialog DLG_WORDCOUNT
Text [ en-US ] = "Word Count" ;
Moveable = TRUE ;
+ Closeable = TRUE;
+ Sizeable = FALSE ;
+ Hide = TRUE ;
+
+ Window WINDOW_DLG
+ {
+ Pos = MAP_APPFONT ( 0 , 0 ) ;
+ Size = MAP_APPFONT ( 170 , 132 ) ;
+
FixedLine FL_CURRENT
{
Pos = MAP_APPFONT ( 6 , 3 ) ;
@@ -136,4 +145,5 @@ ModalDialog DLG_WORDCOUNT
Pos = MAP_APPFONT ( 114 , 112 ) ;
Size = MAP_APPFONT ( 50 , 14 ) ;
};
+ };
};
diff --git a/sw/source/ui/dialog/wordcountwrapper.cxx b/sw/source/ui/dialog/wordcountwrapper.cxx
new file mode 100644
index 0000000..764f9f9
--- /dev/null
+++ b/sw/source/ui/dialog/wordcountwrapper.cxx
@@ -0,0 +1,64 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * Version: MPL 1.1 / GPLv3+ / LGPLv3+
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Initial Developer of the Original Code is
+ * Matt Pratt <mattpratt.au at gmail.com>
+ * Portions created by the Initial Developer are Copyright (C) 2011 the
+ * Initial Developer. All Rights Reserved.
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 3 or later (the "GPLv3+"), or
+ * the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"),
+ * in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable
+ * instead of those above.
+ */
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_sw.hxx"
+
+#include <swtypes.hxx>
+#include <wordcountdialog.hxx>
+#include <docstat.hxx>
+#include <dialog.hrc>
+#include <layout/layout-pre.hxx>
+#include <wordcountdialog.hrc>
+#include <wordcountwrapper.hxx>
+#include <cmdid.h>
+
+SFX_IMPL_CHILDWINDOW(SwWordCountWrapper, FN_WORDCOUNT_DIALOG)
+
+SwWordCountWrapper::SwWordCountWrapper( Window *pParentWindow,
+ sal_uInt16 nId,
+ SfxBindings* pBindings,
+ SfxChildWinInfo* pInfo ) :
+ SfxChildWindow(pParentWindow, nId)
+{
+ SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
+ OSL_ENSURE(pFact, "SwAbstractDialogFactory fail!");
+ pAbstDlg = pFact->CreateSwWordCountDialog( DLG_WORDCOUNT, pBindings, this, pParentWindow, pInfo );
+ OSL_ENSURE(pAbstDlg, "Dialog contruction faiedl!");
+ pWindow = pAbstDlg->GetWindow();
+
+ eChildAlignment = SFX_ALIGN_NOALIGNMENT;
+}
+
+SfxChildWinInfo SwWordCountWrapper::GetInfo() const
+{
+ SfxChildWinInfo aInfo = SfxChildWindow::GetInfo();
+ return aInfo;
+}
+
+void SwWordCountWrapper::UpdateCounts()
+{
+ pAbstDlg->UpdateCounts();
+}
diff --git a/sw/source/ui/docvw/edtwin.cxx b/sw/source/ui/docvw/edtwin.cxx
index 0599176..f18433c 100644
--- a/sw/source/ui/docvw/edtwin.cxx
+++ b/sw/source/ui/docvw/edtwin.cxx
@@ -134,6 +134,9 @@
#include "formatclipboard.hxx"
#include <osl/mutex.hxx>
#include <vcl/svapp.hxx>
+#include <docstat.hxx>
+#include <wordcountdialog.hxx>
+#include <swwait.hxx>
#include <IMark.hxx>
#include <doc.hxx>
@@ -2602,6 +2605,12 @@ KEYINPUT_CHECKTABLE_INSDEL:
ShowAutoTextCorrectQuickHelp(sWord, pACfg, pACorr);
}
}
+
+ // get the word count dialog to update itself
+ SwWordCountWrapper *pWrdCnt = (SwWordCountWrapper*)GetView().GetViewFrame()->GetChildWindow(SwWordCountWrapper::GetChildWindowId());
+ if (pWrdCnt)
+ pWrdCnt->UpdateCounts();
+
}
/*--------------------------------------------------------------------
@@ -3668,6 +3677,13 @@ void SwEditWin::MouseMove(const MouseEvent& _rMEvt)
}
return;
}
+
+ {
+ SwWordCountWrapper *pWrdCnt = (SwWordCountWrapper*)GetView().GetViewFrame()->GetChildWindow(SwWordCountWrapper::GetChildWindowId());
+ if (pWrdCnt)
+ pWrdCnt->UpdateCounts();
+ }
+
case MOUSE_LEFT + KEY_SHIFT:
case MOUSE_LEFT + KEY_SHIFT + KEY_MOD1:
if ( !bMBPressed )
diff --git a/sw/source/ui/inc/wordcountdialog.hxx b/sw/source/ui/inc/wordcountdialog.hxx
index 5c6dbab..d4c996c 100644
--- a/sw/source/ui/inc/wordcountdialog.hxx
+++ b/sw/source/ui/inc/wordcountdialog.hxx
@@ -33,7 +33,12 @@
#include <layout/layout.hxx>
#include <layout/layout-pre.hxx>
struct SwDocStat;
-class SwWordCountDialog : public SfxModalDialog
+#include <sfx2/childwin.hxx>
+#include "swabstdlg.hxx"
+
+class SwWrtShell;
+
+class SwWordCountDialog : public Window
{
FixedLine aCurrentFL;
FixedText aCurrentWordFT;
@@ -56,11 +61,42 @@ class SwWordCountDialog : public SfxModalDialog
OKButton aOK;
HelpButton aHelp;
+ void InitControls();
+
public:
SwWordCountDialog(Window* pParent);
~SwWordCountDialog();
void SetValues(const SwDocStat& rCurrent, const SwDocStat& rDoc);
+
+ SW_DLLPRIVATE DECL_LINK( OkHdl, void* );
+};
+
+class SwWordCountFloatDlg : public SfxModelessDialog
+{
+ SwWordCountDialog aDlg;
+ virtual void Activate();
+ public:
+ SwWordCountFloatDlg( SfxBindings* pBindings,
+ SfxChildWindow* pChild,
+ Window *pParent,
+ SfxChildWinInfo* pInfo);
+ void UpdateCounts();
+};
+
+class SwWordCountWrapper : public SfxChildWindow
+{
+ AbstractSwWordCountFloatDlg* pAbstDlg;
+protected:
+ SwWordCountWrapper( Window *pParentWindow,
+ sal_uInt16 nId,
+ SfxBindings* pBindings,
+ SfxChildWinInfo* pInfo );
+
+ SFX_DECL_CHILDWINDOW(SwWordCountWrapper);
+
+public:
+ void UpdateCounts();
};
#include <layout/layout-post.hxx>
diff --git a/sw/source/ui/shells/annotsh.cxx b/sw/source/ui/shells/annotsh.cxx
index 8b03568..cf38a16 100644
--- a/sw/source/ui/shells/annotsh.cxx
+++ b/sw/source/ui/shells/annotsh.cxx
@@ -410,23 +410,16 @@ void SwAnnotationShell::Exec( SfxRequest &rReq )
break;
case FN_WORDCOUNT_DIALOG:
{
- SwWrtShell &rSh = rView.GetWrtShell();
- SwDocStat aCurr;
- SwDocStat aDocStat;
+ SfxViewFrame* pVFrame = GetView().GetViewFrame();
+ if (pVFrame != NULL)
{
- SwWait aWait( *rView.GetDocShell(), sal_True );
- rSh.StartAction();
- rSh.CountWords( aCurr );
- aDocStat = rSh.GetUpdatedDocStat();
- rSh.EndAction();
- }
+ pVFrame->ToggleChildWindow(FN_WORDCOUNT_DIALOG);
+ Invalidate(rReq.GetSlot());
- SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
- OSL_ENSURE(pFact, "Dialogdiet fail!");
- AbstractSwWordCountDialog* pDialog = pFact->CreateSwWordCountDialog( rView.GetWindow() );
- pDialog->SetValues(aCurr, aDocStat );
- pDialog->Execute();
- delete pDialog;
+ SwWordCountWrapper *pWrdCnt = (SwWordCountWrapper*)pVFrame->GetChildWindow(SwWordCountWrapper::GetChildWindowId());
+ if (pWrdCnt)
+ pWrdCnt->UpdateCounts();
+ }
}
break;
case SID_CHAR_DLG:
diff --git a/sw/source/ui/shells/drawsh.cxx b/sw/source/ui/shells/drawsh.cxx
index 695dddc..7dc94e0 100644
--- a/sw/source/ui/shells/drawsh.cxx
+++ b/sw/source/ui/shells/drawsh.cxx
@@ -232,22 +232,16 @@ void SwDrawShell::Execute(SfxRequest &rReq)
break;
case FN_WORDCOUNT_DIALOG:
{
- SwDocStat aCurr;
- SwDocStat aDocStat;
+ SfxViewFrame* pVFrame = GetView().GetViewFrame();
+ if (pVFrame != NULL)
{
- SwWait aWait( *GetView().GetDocShell(), sal_True );
- rSh.StartAction();
- rSh.CountWords( aCurr );
- aDocStat = rSh.GetUpdatedDocStat();
- rSh.EndAction();
- }
+ pVFrame->ToggleChildWindow(FN_WORDCOUNT_DIALOG);
+ Invalidate(rReq.GetSlot());
- SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
- OSL_ENSURE(pFact, "Dialogdiet fail!");
- AbstractSwWordCountDialog* pDialog = pFact->CreateSwWordCountDialog( GetView().GetWindow() );
- pDialog->SetValues(aCurr, aDocStat );
- pDialog->Execute();
- delete pDialog;
+ SwWordCountWrapper *pWrdCnt = (SwWordCountWrapper*)pVFrame->GetChildWindow(SwWordCountWrapper::GetChildWindowId());
+ if (pWrdCnt)
+ pWrdCnt->UpdateCounts();
+ }
}
break;
case SID_EXTRUSION_TOOGLE:
diff --git a/sw/source/ui/shells/drwtxtex.cxx b/sw/source/ui/shells/drwtxtex.cxx
index 47a6b1a..b21da6d 100644
--- a/sw/source/ui/shells/drwtxtex.cxx
+++ b/sw/source/ui/shells/drwtxtex.cxx
@@ -346,22 +346,16 @@ void SwDrawTextShell::Execute( SfxRequest &rReq )
break;
case FN_WORDCOUNT_DIALOG:
{
- SwDocStat aCurr;
- SwDocStat aDocStat;
+ SfxViewFrame* pVFrame = GetView().GetViewFrame();
+ if (pVFrame != NULL)
{
- SwWait aWait( *GetView().GetDocShell(), sal_True );
- rSh.StartAction();
- rSh.CountWords( aCurr );
- aDocStat = rSh.GetUpdatedDocStat();
- rSh.EndAction();
- }
+ pVFrame->ToggleChildWindow(FN_WORDCOUNT_DIALOG);
+ Invalidate(rReq.GetSlot());
- SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
- OSL_ENSURE(pFact, "Dialogdiet fail!");
- AbstractSwWordCountDialog* pDialog = pFact->CreateSwWordCountDialog( GetView().GetWindow() );
- pDialog->SetValues(aCurr, aDocStat );
- pDialog->Execute();
- delete pDialog;
+ SwWordCountWrapper *pWrdCnt = (SwWordCountWrapper*)pVFrame->GetChildWindow(SwWordCountWrapper::GetChildWindowId());
+ if (pWrdCnt)
+ pWrdCnt->UpdateCounts();
+ }
}
break;
case SID_PARA_DLG:
diff --git a/sw/source/ui/shells/frmsh.cxx b/sw/source/ui/shells/frmsh.cxx
index ce35e49..6eb2ea71 100644
--- a/sw/source/ui/shells/frmsh.cxx
+++ b/sw/source/ui/shells/frmsh.cxx
@@ -418,22 +418,16 @@ void SwFrameShell::Execute(SfxRequest &rReq)
break;
case FN_WORDCOUNT_DIALOG:
{
- SwDocStat aCurr;
- SwDocStat aDocStat;
+ SfxViewFrame* pVFrame = GetView().GetViewFrame();
+ if (pVFrame != NULL)
{
- SwWait aWait( *GetView().GetDocShell(), sal_True );
- rSh.StartAction();
- rSh.CountWords( aCurr );
- aDocStat = rSh.GetUpdatedDocStat();
- rSh.EndAction();
- }
+ pVFrame->ToggleChildWindow(FN_WORDCOUNT_DIALOG);
+ Invalidate(rReq.GetSlot());
- SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
- OSL_ENSURE(pFact, "Dialogdiet fail!");
- AbstractSwWordCountDialog* pDialog = pFact->CreateSwWordCountDialog( GetView().GetWindow() );
- pDialog->SetValues(aCurr, aDocStat );
- pDialog->Execute();
- delete pDialog;
+ SwWordCountWrapper *pWrdCnt = (SwWordCountWrapper*)pVFrame->GetChildWindow(SwWordCountWrapper::GetChildWindowId());
+ if (pWrdCnt)
+ pWrdCnt->UpdateCounts();
+ }
}
break;
default: bMore = sal_True;
diff --git a/sw/source/ui/shells/textsh.cxx b/sw/source/ui/shells/textsh.cxx
index 5835e5c..f379a61 100644
--- a/sw/source/ui/shells/textsh.cxx
+++ b/sw/source/ui/shells/textsh.cxx
@@ -137,6 +137,7 @@ SFX_IMPL_INTERFACE(SwTextShell, SwBaseShell, SW_RES(STR_SHELLNAME_TEXT))
SFX_CHILDWINDOW_REGISTRATION(FN_INSERT_IDX_ENTRY_DLG);
SFX_CHILDWINDOW_REGISTRATION(FN_INSERT_AUTH_ENTRY_DLG);
SFX_CHILDWINDOW_REGISTRATION(SID_RUBY_DIALOG);
+ SFX_CHILDWINDOW_REGISTRATION(FN_WORDCOUNT_DIALOG);
}
TYPEINIT1(SwTextShell,SwBaseShell)
diff --git a/sw/source/ui/shells/textsh1.cxx b/sw/source/ui/shells/textsh1.cxx
index 9fdb4b4..aeda86e 100644
--- a/sw/source/ui/shells/textsh1.cxx
+++ b/sw/source/ui/shells/textsh1.cxx
@@ -124,6 +124,7 @@
#include <sfx2/objface.hxx>
#include <langhelper.hxx>
#include <uiitems.hxx>
+#include <wordcountdialog.hxx>
using namespace ::com::sun::star;
@@ -1287,23 +1288,16 @@ void SwTextShell::Execute(SfxRequest &rReq)
break;
case FN_WORDCOUNT_DIALOG:
{
- SwWrtShell &rSh = GetShell();
- SwDocStat aCurr;
- SwDocStat aDocStat;
+ SfxViewFrame* pVFrame = GetView().GetViewFrame();
+ if (pVFrame != NULL)
{
- SwWait aWait( *GetView().GetDocShell(), sal_True );
- rSh.StartAction();
- rSh.CountWords( aCurr );
- aDocStat = rSh.GetUpdatedDocStat();
- rSh.EndAction();
- }
+ pVFrame->ToggleChildWindow(FN_WORDCOUNT_DIALOG);
+ Invalidate(rReq.GetSlot());
- SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
- OSL_ENSURE(pFact, "Dialogdiet fail!");
- AbstractSwWordCountDialog* pDialog = pFact->CreateSwWordCountDialog( GetView().GetWindow() );
- pDialog->SetValues(aCurr, aDocStat );
- pDialog->Execute();
- delete pDialog;
+ SwWordCountWrapper *pWrdCnt = (SwWordCountWrapper*)pVFrame->GetChildWindow(SwWordCountWrapper::GetChildWindowId());
+ if (pWrdCnt)
+ pWrdCnt->UpdateCounts();
+ }
}
break;
default:
--
1.7.4.1
--------------050207090609040709050205--
More information about the LibreOffice
mailing list