1efeef26fSAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3efeef26fSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4efeef26fSAndrew Rist * or more contributor license agreements. See the NOTICE file
5efeef26fSAndrew Rist * distributed with this work for additional information
6efeef26fSAndrew Rist * regarding copyright ownership. The ASF licenses this file
7efeef26fSAndrew Rist * to you under the Apache License, Version 2.0 (the
8efeef26fSAndrew Rist * "License"); you may not use this file except in compliance
9efeef26fSAndrew Rist * with the License. You may obtain a copy of the License at
10efeef26fSAndrew Rist *
11efeef26fSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12efeef26fSAndrew Rist *
13efeef26fSAndrew Rist * Unless required by applicable law or agreed to in writing,
14efeef26fSAndrew Rist * software distributed under the License is distributed on an
15efeef26fSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16efeef26fSAndrew Rist * KIND, either express or implied. See the License for the
17efeef26fSAndrew Rist * specific language governing permissions and limitations
18efeef26fSAndrew Rist * under the License.
19efeef26fSAndrew Rist *
20efeef26fSAndrew Rist *************************************************************/
21efeef26fSAndrew Rist
22efeef26fSAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sw.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir #include "hintids.hxx"
28cdf0e10cSrcweir
29cdf0e10cSrcweir #ifndef _SVSTDARR_HXX
30cdf0e10cSrcweir #define _SVSTDARR_USHORTS
31cdf0e10cSrcweir #include <svl/svstdarr.hxx>
32cdf0e10cSrcweir #endif
33cdf0e10cSrcweir #include <svl/intitem.hxx>
34cdf0e10cSrcweir #include <svl/stritem.hxx>
35cdf0e10cSrcweir #include <sfx2/dispatch.hxx>
36cdf0e10cSrcweir #ifndef _EVENT_HXX //autogen
37cdf0e10cSrcweir #include <vcl/event.hxx>
38cdf0e10cSrcweir #endif
39cdf0e10cSrcweir #ifndef _STATUS_HXX //autogen
40cdf0e10cSrcweir #include <vcl/status.hxx>
41cdf0e10cSrcweir #endif
42cdf0e10cSrcweir #ifndef _MENU_HXX //autogen
43cdf0e10cSrcweir #include <vcl/menu.hxx>
44cdf0e10cSrcweir #endif
45cdf0e10cSrcweir #include "cmdid.h"
46cdf0e10cSrcweir #include "errhdl.hxx"
47cdf0e10cSrcweir #include "swmodule.hxx"
48cdf0e10cSrcweir #include "wrtsh.hxx"
49cdf0e10cSrcweir #include "IMark.hxx"
50cdf0e10cSrcweir #include "bookctrl.hxx"
51cdf0e10cSrcweir #include <map>
52cdf0e10cSrcweir
53cdf0e10cSrcweir SFX_IMPL_STATUSBAR_CONTROL( SwBookmarkControl, SfxStringItem );
54cdf0e10cSrcweir
55cdf0e10cSrcweir // class BookmarkPopup_Impl --------------------------------------------------
56cdf0e10cSrcweir
57cdf0e10cSrcweir class BookmarkPopup_Impl : public PopupMenu
58cdf0e10cSrcweir {
59cdf0e10cSrcweir public:
60cdf0e10cSrcweir BookmarkPopup_Impl();
61cdf0e10cSrcweir
GetCurId() const62cdf0e10cSrcweir sal_uInt16 GetCurId() const { return nCurId; }
63cdf0e10cSrcweir
64cdf0e10cSrcweir private:
65cdf0e10cSrcweir sal_uInt16 nCurId;
66cdf0e10cSrcweir
67cdf0e10cSrcweir virtual void Select();
68cdf0e10cSrcweir };
69cdf0e10cSrcweir
70cdf0e10cSrcweir // -----------------------------------------------------------------------
71cdf0e10cSrcweir
BookmarkPopup_Impl()72cdf0e10cSrcweir BookmarkPopup_Impl::BookmarkPopup_Impl() :
73cdf0e10cSrcweir PopupMenu(),
74cdf0e10cSrcweir nCurId(USHRT_MAX)
75cdf0e10cSrcweir {
76cdf0e10cSrcweir }
77cdf0e10cSrcweir
78cdf0e10cSrcweir // -----------------------------------------------------------------------
79cdf0e10cSrcweir
Select()80cdf0e10cSrcweir void BookmarkPopup_Impl::Select()
81cdf0e10cSrcweir {
82cdf0e10cSrcweir nCurId = GetCurItemId();
83cdf0e10cSrcweir }
84cdf0e10cSrcweir
85cdf0e10cSrcweir // class SvxZoomStatusBarControl ------------------------------------------
86cdf0e10cSrcweir
SwBookmarkControl(sal_uInt16 _nSlotId,sal_uInt16 _nId,StatusBar & rStb)87cdf0e10cSrcweir SwBookmarkControl::SwBookmarkControl( sal_uInt16 _nSlotId,
88cdf0e10cSrcweir sal_uInt16 _nId,
89cdf0e10cSrcweir StatusBar& rStb ) :
90cdf0e10cSrcweir SfxStatusBarControl( _nSlotId, _nId, rStb )
91cdf0e10cSrcweir {
92cdf0e10cSrcweir }
93cdf0e10cSrcweir
94cdf0e10cSrcweir // -----------------------------------------------------------------------
95cdf0e10cSrcweir
~SwBookmarkControl()96cdf0e10cSrcweir SwBookmarkControl::~SwBookmarkControl()
97cdf0e10cSrcweir {
98cdf0e10cSrcweir }
99cdf0e10cSrcweir
100cdf0e10cSrcweir // -----------------------------------------------------------------------
101cdf0e10cSrcweir
StateChanged(sal_uInt16,SfxItemState eState,const SfxPoolItem * pState)102cdf0e10cSrcweir void SwBookmarkControl::StateChanged(
103cdf0e10cSrcweir sal_uInt16 /*nSID*/, SfxItemState eState, const SfxPoolItem* pState )
104cdf0e10cSrcweir {
105cdf0e10cSrcweir if( eState != SFX_ITEM_AVAILABLE || pState->ISA( SfxVoidItem ) )
106cdf0e10cSrcweir GetStatusBar().SetItemText( GetId(), String() );
107cdf0e10cSrcweir else if ( pState->ISA( SfxStringItem ) )
108cdf0e10cSrcweir {
109cdf0e10cSrcweir sPageNumber = ((SfxStringItem*)pState)->GetValue();
110cdf0e10cSrcweir GetStatusBar().SetItemText( GetId(), sPageNumber );
111cdf0e10cSrcweir }
112cdf0e10cSrcweir }
113cdf0e10cSrcweir
114cdf0e10cSrcweir // -----------------------------------------------------------------------
115cdf0e10cSrcweir
Paint(const UserDrawEvent &)116cdf0e10cSrcweir void SwBookmarkControl::Paint( const UserDrawEvent& )
117cdf0e10cSrcweir {
118cdf0e10cSrcweir GetStatusBar().SetItemText( GetId(), sPageNumber );
119cdf0e10cSrcweir }
120cdf0e10cSrcweir
121cdf0e10cSrcweir // -----------------------------------------------------------------------
122cdf0e10cSrcweir
Command(const CommandEvent & rCEvt)123cdf0e10cSrcweir void SwBookmarkControl::Command( const CommandEvent& rCEvt )
124cdf0e10cSrcweir {
125cdf0e10cSrcweir if ( rCEvt.GetCommand() == COMMAND_CONTEXTMENU &&
126cdf0e10cSrcweir GetStatusBar().GetItemText( GetId() ).Len() )
127cdf0e10cSrcweir {
128cdf0e10cSrcweir CaptureMouse();
129cdf0e10cSrcweir BookmarkPopup_Impl aPop;
130cdf0e10cSrcweir SwWrtShell* pWrtShell = ::GetActiveWrtShell();
131*dec99bbdSOliver-Rainer Wittmann if( pWrtShell && pWrtShell->getIDocumentMarkAccess()->getAllMarksCount() > 0 )
132cdf0e10cSrcweir {
133cdf0e10cSrcweir IDocumentMarkAccess* const pMarkAccess = pWrtShell->getIDocumentMarkAccess();
134cdf0e10cSrcweir IDocumentMarkAccess::const_iterator_t ppBookmarkStart = pMarkAccess->getBookmarksBegin();
135cdf0e10cSrcweir sal_uInt16 nPopupId = 1;
136cdf0e10cSrcweir ::std::map<sal_Int32, sal_uInt16> aBookmarkIdx;
137cdf0e10cSrcweir for(IDocumentMarkAccess::const_iterator_t ppBookmark = ppBookmarkStart;
138cdf0e10cSrcweir ppBookmark != pMarkAccess->getBookmarksEnd();
139cdf0e10cSrcweir ppBookmark++)
140cdf0e10cSrcweir {
141cdf0e10cSrcweir if(IDocumentMarkAccess::BOOKMARK == IDocumentMarkAccess::GetType(**ppBookmark))
142cdf0e10cSrcweir {
143cdf0e10cSrcweir aPop.InsertItem( nPopupId, ppBookmark->get()->GetName() );
144cdf0e10cSrcweir aBookmarkIdx[nPopupId] = static_cast<sal_uInt16>(ppBookmark - ppBookmarkStart);
145cdf0e10cSrcweir nPopupId++;
146cdf0e10cSrcweir }
147cdf0e10cSrcweir }
148cdf0e10cSrcweir aPop.Execute( &GetStatusBar(), rCEvt.GetMousePosPixel());
149cdf0e10cSrcweir sal_uInt16 nCurrId = aPop.GetCurId();
150cdf0e10cSrcweir if( nCurrId != USHRT_MAX)
151cdf0e10cSrcweir {
152cdf0e10cSrcweir SfxUInt16Item aBookmark( FN_STAT_BOOKMARK, aBookmarkIdx[nCurrId] );
153cdf0e10cSrcweir SfxViewFrame::Current()->GetDispatcher()->Execute( FN_STAT_BOOKMARK,
154cdf0e10cSrcweir SFX_CALLMODE_ASYNCHRON|SFX_CALLMODE_RECORD,
155cdf0e10cSrcweir &aBookmark, 0L );
156cdf0e10cSrcweir }
157cdf0e10cSrcweir }
158cdf0e10cSrcweir ReleaseMouse();
159cdf0e10cSrcweir }
160cdf0e10cSrcweir }
161