diff options
author | Matt Pratt <mattpratt.au@gmail.com> | 2011-11-01 22:47:33 -0600 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2011-11-02 14:55:52 +0000 |
commit | 12402e2cfdacf9a77af390e51ce12a4a6025f286 (patch) | |
tree | 6491410b14f6f9ad94fae0cca944be36dd2c576c | |
parent | 0c9d2b9cb3f1b5bac034ccfee0eb83aa2182f2cf (diff) |
Resolves: #i46785# Word count dialog modeless
-rw-r--r-- | sw/Library_sw.mk | 1 | ||||
-rw-r--r-- | sw/inc/swabstdlg.hxx | 12 | ||||
-rw-r--r-- | sw/source/ui/app/swmodule.cxx | 2 | ||||
-rw-r--r-- | sw/source/ui/dialog/swdlgfact.cxx | 45 | ||||
-rw-r--r-- | sw/source/ui/dialog/swdlgfact.hxx | 15 | ||||
-rw-r--r-- | sw/source/ui/dialog/wordcountdialog.cxx | 56 | ||||
-rw-r--r-- | sw/source/ui/dialog/wordcountdialog.hrc | 1 | ||||
-rw-r--r-- | sw/source/ui/dialog/wordcountdialog.src | 12 | ||||
-rw-r--r-- | sw/source/ui/dialog/wordcountwrapper.cxx | 64 | ||||
-rw-r--r-- | sw/source/ui/docvw/edtwin.cxx | 16 | ||||
-rw-r--r-- | sw/source/ui/inc/wordcountdialog.hxx | 38 | ||||
-rw-r--r-- | sw/source/ui/shells/annotsh.cxx | 23 | ||||
-rw-r--r-- | sw/source/ui/shells/drawsh.cxx | 22 | ||||
-rw-r--r-- | sw/source/ui/shells/drwtxtex.cxx | 22 | ||||
-rw-r--r-- | sw/source/ui/shells/frmsh.cxx | 22 | ||||
-rw-r--r-- | sw/source/ui/shells/textsh.cxx | 1 | ||||
-rw-r--r-- | sw/source/ui/shells/textsh1.cxx | 24 |
17 files changed, 280 insertions, 96 deletions
diff --git a/sw/Library_sw.mk b/sw/Library_sw.mk index b2ce776cd635..a8ee38387d4b 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 9a685db6b506..2c6045ca1e87 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 4a663622a10b..e1bdf64e8797 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 03b5b0c3978a..a46d03b57528 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 b4ee0910b7e8..66ee0aba9167 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 4a98a4e19294..2ff37eda90b9 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 af6f3a79c76c..0db5c87b970f 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 767913a0e5c9..a324c45d4d2b 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 000000000000..764f9f9f910c --- /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@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 05991767b88c..f18433c4b929 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 5c6dbabea04f..d4c996cba40e 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 8b03568dac8e..cf38a168e88e 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 695dddc69013..7dc94e01aefc 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 47a6b1a6caf2..b21da6dd7333 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 ce35e494febc..6eb2ea712bc5 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 5835e5c169b4..f379a6118d38 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 9fdb4b46a907..aeda86e135e7 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: |