1*f6e50924SAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*f6e50924SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*f6e50924SAndrew Rist * or more contributor license agreements. See the NOTICE file
5*f6e50924SAndrew Rist * distributed with this work for additional information
6*f6e50924SAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*f6e50924SAndrew Rist * to you under the Apache License, Version 2.0 (the
8*f6e50924SAndrew Rist * "License"); you may not use this file except in compliance
9*f6e50924SAndrew Rist * with the License. You may obtain a copy of the License at
10*f6e50924SAndrew Rist *
11*f6e50924SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12*f6e50924SAndrew Rist *
13*f6e50924SAndrew Rist * Unless required by applicable law or agreed to in writing,
14*f6e50924SAndrew Rist * software distributed under the License is distributed on an
15*f6e50924SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*f6e50924SAndrew Rist * KIND, either express or implied. See the License for the
17*f6e50924SAndrew Rist * specific language governing permissions and limitations
18*f6e50924SAndrew Rist * under the License.
19*f6e50924SAndrew Rist *
20*f6e50924SAndrew Rist *************************************************************/
21*f6e50924SAndrew Rist
22*f6e50924SAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_svx.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir #ifdef _TOOLS_DEBUG_HXX
28cdf0e10cSrcweir #include <tools/debug.hxx>
29cdf0e10cSrcweir #endif
30cdf0e10cSrcweir #include <vcl/lstbox.hxx>
31cdf0e10cSrcweir #include <vcl/toolbox.hxx>
32cdf0e10cSrcweir #include <vcl/event.hxx>
33cdf0e10cSrcweir #include <sfx2/app.hxx>
34cdf0e10cSrcweir #include <sfx2/tbxctrl.hxx>
35cdf0e10cSrcweir #include <sfx2/bindings.hxx>
36cdf0e10cSrcweir #include <sfx2/dispatch.hxx>
37cdf0e10cSrcweir #include <sfx2/viewsh.hxx>
38cdf0e10cSrcweir #include <tools/gen.hxx>
39cdf0e10cSrcweir #include <svl/intitem.hxx>
40cdf0e10cSrcweir #include <svl/eitem.hxx>
41cdf0e10cSrcweir #include <svtools/stdctrl.hxx>
42cdf0e10cSrcweir #include <svl/slstitm.hxx>
43cdf0e10cSrcweir #include <svl/stritem.hxx>
44cdf0e10cSrcweir #include <svx/dialmgr.hxx>
45cdf0e10cSrcweir #include <svx/lboxctrl.hxx>
46cdf0e10cSrcweir #ifndef _VCL_MNEMONIC_HXX_
47cdf0e10cSrcweir #include <vcl/mnemonic.hxx>
48cdf0e10cSrcweir #endif
49cdf0e10cSrcweir #include <tools/urlobj.hxx>
50cdf0e10cSrcweir
51cdf0e10cSrcweir #include <svx/svxids.hrc>
52cdf0e10cSrcweir #include <svx/dialogs.hrc>
53cdf0e10cSrcweir
54cdf0e10cSrcweir #include "lboxctrl.hrc"
55cdf0e10cSrcweir
56cdf0e10cSrcweir
57cdf0e10cSrcweir using namespace ::com::sun::star::uno;
58cdf0e10cSrcweir using namespace ::com::sun::star::beans;
59cdf0e10cSrcweir using namespace ::com::sun::star::frame;
60cdf0e10cSrcweir
61cdf0e10cSrcweir class SvxPopupWindowListBox;
62cdf0e10cSrcweir
63cdf0e10cSrcweir /////////////////////////////////////////////////////////////////
64cdf0e10cSrcweir
65cdf0e10cSrcweir class SvxPopupWindowListBox : public SfxPopupWindow
66cdf0e10cSrcweir {
67cdf0e10cSrcweir using FloatingWindow::StateChanged;
68cdf0e10cSrcweir
69cdf0e10cSrcweir FixedInfo aInfo;
70cdf0e10cSrcweir ListBox * pListBox;
71cdf0e10cSrcweir ToolBox & rToolBox;
72cdf0e10cSrcweir sal_Bool bUserSel;
73cdf0e10cSrcweir sal_uInt16 nTbxId;
74cdf0e10cSrcweir rtl::OUString maCommandURL;
75cdf0e10cSrcweir // disallow copy-constructor and assignment-operator
76cdf0e10cSrcweir
77cdf0e10cSrcweir SvxPopupWindowListBox(const int& );
78cdf0e10cSrcweir SvxPopupWindowListBox & operator = (const int& );
79cdf0e10cSrcweir
80cdf0e10cSrcweir // SvxPopupWindowListBox( sal_uInt16 nSlotId, ToolBox& rTbx, sal_uInt16 nTbxItemId );
81cdf0e10cSrcweir
82cdf0e10cSrcweir public:
83cdf0e10cSrcweir SvxPopupWindowListBox( sal_uInt16 nSlotId, const rtl::OUString& rCommandURL, sal_uInt16 nTbxId, ToolBox& rTbx );
84cdf0e10cSrcweir virtual ~SvxPopupWindowListBox();
85cdf0e10cSrcweir
86cdf0e10cSrcweir // SfxPopupWindow
87cdf0e10cSrcweir virtual SfxPopupWindow * Clone() const;
88cdf0e10cSrcweir virtual void PopupModeEnd();
89cdf0e10cSrcweir virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState,
90cdf0e10cSrcweir const SfxPoolItem* pState );
91cdf0e10cSrcweir
92cdf0e10cSrcweir void StartSelection();
GetListBox()93cdf0e10cSrcweir inline ListBox & GetListBox() { return *pListBox; }
GetInfo()94cdf0e10cSrcweir inline FixedInfo & GetInfo() { return aInfo; }
95cdf0e10cSrcweir
IsUserSelected() const96cdf0e10cSrcweir sal_Bool IsUserSelected() const { return bUserSel; }
SetUserSelected(sal_Bool bVal)97cdf0e10cSrcweir void SetUserSelected( sal_Bool bVal ) { bUserSel = bVal; }
98cdf0e10cSrcweir /*virtual*/Window* GetPreferredKeyInputWindow();
99cdf0e10cSrcweir };
100cdf0e10cSrcweir
101cdf0e10cSrcweir /////////////////////////////////////////////////////////////////
102cdf0e10cSrcweir
SvxPopupWindowListBox(sal_uInt16 nSlotId,const rtl::OUString & rCommandURL,sal_uInt16 nId,ToolBox & rTbx)103cdf0e10cSrcweir SvxPopupWindowListBox::SvxPopupWindowListBox( sal_uInt16 nSlotId, const rtl::OUString& rCommandURL, sal_uInt16 nId, ToolBox& rTbx ) :
104cdf0e10cSrcweir SfxPopupWindow( nSlotId, Reference< XFrame >(), SVX_RES( RID_SVXTBX_UNDO_REDO_CTRL ) ),
105cdf0e10cSrcweir aInfo ( this, SVX_RES( FT_NUM_OPERATIONS ) ),
106cdf0e10cSrcweir rToolBox ( rTbx ),
107cdf0e10cSrcweir bUserSel ( sal_False ),
108cdf0e10cSrcweir nTbxId ( nId ),
109cdf0e10cSrcweir maCommandURL( rCommandURL )
110cdf0e10cSrcweir {
111cdf0e10cSrcweir DBG_ASSERT( nSlotId == GetId(), "id mismatch" );
112cdf0e10cSrcweir pListBox = new ListBox( this, SVX_RES( LB_SVXTBX_UNDO_REDO_CTRL ) );
113cdf0e10cSrcweir FreeResource();
114cdf0e10cSrcweir pListBox->EnableMultiSelection( sal_True, sal_True );
115cdf0e10cSrcweir SetBackground( GetSettings().GetStyleSettings().GetDialogColor() );
116cdf0e10cSrcweir AddStatusListener( rCommandURL );
117cdf0e10cSrcweir }
118cdf0e10cSrcweir
119cdf0e10cSrcweir
~SvxPopupWindowListBox()120cdf0e10cSrcweir SvxPopupWindowListBox::~SvxPopupWindowListBox()
121cdf0e10cSrcweir {
122cdf0e10cSrcweir delete pListBox;
123cdf0e10cSrcweir }
124cdf0e10cSrcweir
125cdf0e10cSrcweir
Clone() const126cdf0e10cSrcweir SfxPopupWindow* SvxPopupWindowListBox::Clone() const
127cdf0e10cSrcweir {
128cdf0e10cSrcweir return new SvxPopupWindowListBox( GetId(), maCommandURL, nTbxId, rToolBox );
129cdf0e10cSrcweir }
130cdf0e10cSrcweir
131cdf0e10cSrcweir
PopupModeEnd()132cdf0e10cSrcweir void SvxPopupWindowListBox::PopupModeEnd()
133cdf0e10cSrcweir {
134cdf0e10cSrcweir rToolBox.EndSelection();
135cdf0e10cSrcweir SfxPopupWindow::PopupModeEnd();
136cdf0e10cSrcweir //FloatingWindow::PopupModeEnd();
137cdf0e10cSrcweir
138cdf0e10cSrcweir if( SfxViewShell::Current() )
139cdf0e10cSrcweir {
140cdf0e10cSrcweir Window* pShellWnd = SfxViewShell::Current()->GetWindow();
141cdf0e10cSrcweir if (pShellWnd)
142cdf0e10cSrcweir pShellWnd->GrabFocus();
143cdf0e10cSrcweir }
144cdf0e10cSrcweir }
145cdf0e10cSrcweir
146cdf0e10cSrcweir
StateChanged(sal_uInt16 nSID,SfxItemState eState,const SfxPoolItem * pState)147cdf0e10cSrcweir void SvxPopupWindowListBox::StateChanged(
148cdf0e10cSrcweir sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState )
149cdf0e10cSrcweir {
150cdf0e10cSrcweir rToolBox.EnableItem( nTbxId, ( SfxToolBoxControl::GetItemState( pState ) != SFX_ITEM_DISABLED) );
151cdf0e10cSrcweir SfxPopupWindow::StateChanged( nSID, eState, pState );
152cdf0e10cSrcweir }
153cdf0e10cSrcweir
154cdf0e10cSrcweir
StartSelection()155cdf0e10cSrcweir void SvxPopupWindowListBox::StartSelection()
156cdf0e10cSrcweir {
157cdf0e10cSrcweir rToolBox.StartSelection();
158cdf0e10cSrcweir }
159cdf0e10cSrcweir
GetPreferredKeyInputWindow()160cdf0e10cSrcweir Window* SvxPopupWindowListBox::GetPreferredKeyInputWindow()
161cdf0e10cSrcweir {
162cdf0e10cSrcweir // allows forwarding key events in the correct window
163cdf0e10cSrcweir // without setting the focus
164cdf0e10cSrcweir return pListBox->GetPreferredKeyInputWindow();
165cdf0e10cSrcweir }
166cdf0e10cSrcweir
167cdf0e10cSrcweir /////////////////////////////////////////////////////////////////
168cdf0e10cSrcweir
169cdf0e10cSrcweir SFX_IMPL_TOOLBOX_CONTROL( SvxListBoxControl, SfxStringItem );
170cdf0e10cSrcweir
171cdf0e10cSrcweir
SvxListBoxControl(sal_uInt16 nSlotId,sal_uInt16 nId,ToolBox & rTbx)172cdf0e10cSrcweir SvxListBoxControl::SvxListBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx )
173cdf0e10cSrcweir :SfxToolBoxControl( nSlotId, nId, rTbx ),
174cdf0e10cSrcweir pPopupWin ( 0 )
175cdf0e10cSrcweir {
176cdf0e10cSrcweir rTbx.SetItemBits( nId, TIB_DROPDOWN | rTbx.GetItemBits( nId ) );
177cdf0e10cSrcweir rTbx.Invalidate();
178cdf0e10cSrcweir }
179cdf0e10cSrcweir
180cdf0e10cSrcweir
~SvxListBoxControl()181cdf0e10cSrcweir SvxListBoxControl::~SvxListBoxControl()
182cdf0e10cSrcweir {
183cdf0e10cSrcweir }
184cdf0e10cSrcweir
185cdf0e10cSrcweir
CreatePopupWindow()186cdf0e10cSrcweir SfxPopupWindow* SvxListBoxControl::CreatePopupWindow()
187cdf0e10cSrcweir {
188cdf0e10cSrcweir DBG_ERROR( "not implemented" );
189cdf0e10cSrcweir return 0;
190cdf0e10cSrcweir }
191cdf0e10cSrcweir
192cdf0e10cSrcweir
GetPopupWindowType() const193cdf0e10cSrcweir SfxPopupWindowType SvxListBoxControl::GetPopupWindowType() const
194cdf0e10cSrcweir {
195cdf0e10cSrcweir return SFX_POPUPWINDOW_ONTIMEOUT;
196cdf0e10cSrcweir }
197cdf0e10cSrcweir
198cdf0e10cSrcweir
StateChanged(sal_uInt16,SfxItemState,const SfxPoolItem * pState)199cdf0e10cSrcweir void SvxListBoxControl::StateChanged(
200cdf0e10cSrcweir sal_uInt16, SfxItemState, const SfxPoolItem* pState )
201cdf0e10cSrcweir {
202cdf0e10cSrcweir GetToolBox().EnableItem( GetId(),
203cdf0e10cSrcweir SFX_ITEM_DISABLED != GetItemState(pState) );
204cdf0e10cSrcweir }
205cdf0e10cSrcweir
206cdf0e10cSrcweir
IMPL_LINK(SvxListBoxControl,PopupModeEndHdl,void *,EMPTYARG)207cdf0e10cSrcweir IMPL_LINK( SvxListBoxControl, PopupModeEndHdl, void *, EMPTYARG )
208cdf0e10cSrcweir {
209cdf0e10cSrcweir if( pPopupWin && 0 == pPopupWin->GetPopupModeFlags() &&
210cdf0e10cSrcweir pPopupWin->IsUserSelected() )
211cdf0e10cSrcweir {
212cdf0e10cSrcweir sal_uInt16 nCount = pPopupWin->GetListBox().GetSelectEntryCount();
213cdf0e10cSrcweir
214cdf0e10cSrcweir INetURLObject aObj( m_aCommandURL );
215cdf0e10cSrcweir
216cdf0e10cSrcweir Sequence< PropertyValue > aArgs( 1 );
217cdf0e10cSrcweir aArgs[0].Name = aObj.GetURLPath();
218cdf0e10cSrcweir aArgs[0].Value = makeAny( sal_Int16( nCount ));
219cdf0e10cSrcweir SfxToolBoxControl::Dispatch( m_aCommandURL, aArgs );
220cdf0e10cSrcweir }
221cdf0e10cSrcweir return 0;
222cdf0e10cSrcweir }
223cdf0e10cSrcweir
224cdf0e10cSrcweir
Impl_SetInfo(sal_uInt16 nCount)225cdf0e10cSrcweir void SvxListBoxControl::Impl_SetInfo( sal_uInt16 nCount )
226cdf0e10cSrcweir {
227cdf0e10cSrcweir DBG_ASSERT( pPopupWin, "NULL pointer, PopupWindow missing" );
228cdf0e10cSrcweir
229cdf0e10cSrcweir // ListBox &rListBox = pPopupWin->GetListBox();
230cdf0e10cSrcweir
231cdf0e10cSrcweir sal_uInt16 nId;
232cdf0e10cSrcweir if (nCount == 1)
233cdf0e10cSrcweir nId = SID_UNDO == GetSlotId() ? RID_SVXSTR_NUM_UNDO_ACTION : RID_SVXSTR_NUM_REDO_ACTION;
234cdf0e10cSrcweir else
235cdf0e10cSrcweir nId = SID_UNDO == GetSlotId() ? RID_SVXSTR_NUM_UNDO_ACTIONS : RID_SVXSTR_NUM_REDO_ACTIONS;
236cdf0e10cSrcweir
237cdf0e10cSrcweir aActionStr = String(SVX_RES(nId));
238cdf0e10cSrcweir
239cdf0e10cSrcweir String aText( aActionStr );
240cdf0e10cSrcweir aText.SearchAndReplaceAllAscii( "$(ARG1)", String::CreateFromInt32( nCount ) );
241cdf0e10cSrcweir pPopupWin->GetInfo().SetText( aText );
242cdf0e10cSrcweir }
243cdf0e10cSrcweir
244cdf0e10cSrcweir
IMPL_LINK(SvxListBoxControl,SelectHdl,void *,EMPTYARG)245cdf0e10cSrcweir IMPL_LINK( SvxListBoxControl, SelectHdl, void *, EMPTYARG )
246cdf0e10cSrcweir {
247cdf0e10cSrcweir if (pPopupWin)
248cdf0e10cSrcweir {
249cdf0e10cSrcweir //pPopupWin->SetUserSelected( sal_False );
250cdf0e10cSrcweir
251cdf0e10cSrcweir ListBox &rListBox = pPopupWin->GetListBox();
252cdf0e10cSrcweir if (rListBox.IsTravelSelect())
253cdf0e10cSrcweir Impl_SetInfo( rListBox.GetSelectEntryCount() );
254cdf0e10cSrcweir else
255cdf0e10cSrcweir {
256cdf0e10cSrcweir pPopupWin->SetUserSelected( sal_True );
257cdf0e10cSrcweir pPopupWin->EndPopupMode( 0 );
258cdf0e10cSrcweir }
259cdf0e10cSrcweir }
260cdf0e10cSrcweir return 0;
261cdf0e10cSrcweir }
262cdf0e10cSrcweir
263cdf0e10cSrcweir /////////////////////////////////////////////////////////////////
264cdf0e10cSrcweir
265cdf0e10cSrcweir SFX_IMPL_TOOLBOX_CONTROL( SvxUndoRedoControl, SfxStringItem );
266cdf0e10cSrcweir
SvxUndoRedoControl(sal_uInt16 nSlotId,sal_uInt16 nId,ToolBox & rTbx)267cdf0e10cSrcweir SvxUndoRedoControl::SvxUndoRedoControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx )
268cdf0e10cSrcweir : SvxListBoxControl( nSlotId, nId, rTbx )
269cdf0e10cSrcweir {
270cdf0e10cSrcweir rTbx.SetItemBits( nId, TIB_DROPDOWN | rTbx.GetItemBits( nId ) );
271cdf0e10cSrcweir rTbx.Invalidate();
272cdf0e10cSrcweir aDefaultText = MnemonicGenerator::EraseAllMnemonicChars( rTbx.GetItemText( nId ) );
273cdf0e10cSrcweir }
274cdf0e10cSrcweir
~SvxUndoRedoControl()275cdf0e10cSrcweir SvxUndoRedoControl::~SvxUndoRedoControl()
276cdf0e10cSrcweir {
277cdf0e10cSrcweir }
278cdf0e10cSrcweir
StateChanged(sal_uInt16 nSID,SfxItemState eState,const SfxPoolItem * pState)279cdf0e10cSrcweir void SvxUndoRedoControl::StateChanged(
280cdf0e10cSrcweir sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState )
281cdf0e10cSrcweir {
282cdf0e10cSrcweir if ( nSID == SID_UNDO || nSID == SID_REDO )
283cdf0e10cSrcweir {
284cdf0e10cSrcweir if ( eState == SFX_ITEM_DISABLED )
285cdf0e10cSrcweir {
286cdf0e10cSrcweir ToolBox& rBox = GetToolBox();
287cdf0e10cSrcweir rBox.SetQuickHelpText( GetId(), aDefaultText );
288cdf0e10cSrcweir }
289cdf0e10cSrcweir else if ( pState && pState->ISA( SfxStringItem ) )
290cdf0e10cSrcweir {
291cdf0e10cSrcweir SfxStringItem& rItem = *(SfxStringItem *)pState;
292cdf0e10cSrcweir ToolBox& rBox = GetToolBox();
293cdf0e10cSrcweir String aQuickHelpText = MnemonicGenerator::EraseAllMnemonicChars( rItem.GetValue() );
294cdf0e10cSrcweir rBox.SetQuickHelpText( GetId(), aQuickHelpText );
295cdf0e10cSrcweir }
296cdf0e10cSrcweir SvxListBoxControl::StateChanged( nSID, eState, pState );
297cdf0e10cSrcweir }
298cdf0e10cSrcweir else
299cdf0e10cSrcweir {
300cdf0e10cSrcweir aUndoRedoList.clear();
301cdf0e10cSrcweir
302cdf0e10cSrcweir if ( pState && pState->ISA( SfxStringListItem ) )
303cdf0e10cSrcweir {
304cdf0e10cSrcweir SfxStringListItem &rItem = *(SfxStringListItem *)pState;
305cdf0e10cSrcweir const List* pLst = rItem.GetList();
306cdf0e10cSrcweir DBG_ASSERT( pLst, "no undo actions available" );
307cdf0e10cSrcweir if ( pLst )
308cdf0e10cSrcweir {
309cdf0e10cSrcweir for( long nI = 0, nEnd = pLst->Count(); nI < nEnd; ++nI )
310cdf0e10cSrcweir aUndoRedoList.push_back( rtl::OUString( *(String *)pLst->GetObject( nI )));
311cdf0e10cSrcweir }
312cdf0e10cSrcweir }
313cdf0e10cSrcweir }
314cdf0e10cSrcweir }
315cdf0e10cSrcweir
CreatePopupWindow()316cdf0e10cSrcweir SfxPopupWindow* SvxUndoRedoControl::CreatePopupWindow()
317cdf0e10cSrcweir {
318cdf0e10cSrcweir DBG_ASSERT(( SID_UNDO == GetSlotId() || SID_REDO == GetSlotId() ), "mismatching ids" );
319cdf0e10cSrcweir
320cdf0e10cSrcweir if ( m_aCommandURL.equalsAscii( ".uno:Undo" ))
321cdf0e10cSrcweir updateStatus( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:GetUndoStrings" )));
322cdf0e10cSrcweir else
323cdf0e10cSrcweir updateStatus( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:GetRedoStrings" )));
324cdf0e10cSrcweir
325cdf0e10cSrcweir ToolBox& rBox = GetToolBox();
326cdf0e10cSrcweir
327cdf0e10cSrcweir pPopupWin = new SvxPopupWindowListBox( GetSlotId(), m_aCommandURL, GetId(), rBox );
328cdf0e10cSrcweir pPopupWin->SetPopupModeEndHdl( LINK( this, SvxUndoRedoControl,
329cdf0e10cSrcweir PopupModeEndHdl ) );
330cdf0e10cSrcweir ListBox &rListBox = pPopupWin->GetListBox();
331cdf0e10cSrcweir rListBox.SetSelectHdl( LINK( this, SvxUndoRedoControl, SelectHdl ) );
332cdf0e10cSrcweir
333cdf0e10cSrcweir for( sal_uInt32 n = 0; n < aUndoRedoList.size(); n++ )
334cdf0e10cSrcweir rListBox.InsertEntry( String( aUndoRedoList[n] ));
335cdf0e10cSrcweir
336cdf0e10cSrcweir rListBox.SelectEntryPos( 0 );
337cdf0e10cSrcweir aActionStr = String( SVX_RES( SID_UNDO == GetSlotId() ?
338cdf0e10cSrcweir RID_SVXSTR_NUM_UNDO_ACTIONS : RID_SVXSTR_NUM_REDO_ACTIONS ) );
339cdf0e10cSrcweir Impl_SetInfo( rListBox.GetSelectEntryCount() );
340cdf0e10cSrcweir
341cdf0e10cSrcweir // move focus in floating window without
342cdf0e10cSrcweir // closing it (GrabFocus() would close it!)
343cdf0e10cSrcweir pPopupWin->StartPopupMode( &rBox, FLOATWIN_POPUPMODE_GRABFOCUS );
344cdf0e10cSrcweir //pPopupWin->GetListBox().GrabFocus();
345cdf0e10cSrcweir
346cdf0e10cSrcweir return pPopupWin;
347cdf0e10cSrcweir }
348