Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #ifndef INCLUDED_SW_SOURCE_CORE_INC_BOOKMRK_HXX
21 : #define INCLUDED_SW_SOURCE_CORE_INC_BOOKMRK_HXX
22 :
23 : #include <cppuhelper/weakref.hxx>
24 : #include <sfx2/Metadatable.hxx>
25 : #include <boost/scoped_ptr.hpp>
26 : #include <boost/noncopyable.hpp>
27 : #include <map>
28 : #include <rtl/ustring.hxx>
29 : #include <IMark.hxx>
30 : #include <swserv.hxx>
31 :
32 : namespace com {
33 : namespace sun {
34 : namespace star {
35 : namespace text {
36 : class XTextContent;
37 : }
38 : }
39 : }
40 : }
41 :
42 : struct SwPosition; // fwd Decl. wg. UI
43 : class SwDoc;
44 :
45 : namespace sw {
46 : namespace mark {
47 : class MarkBase
48 : : virtual public IMark
49 : {
50 : public:
51 : //getters
52 0 : virtual SwPosition& GetMarkPos() const SAL_OVERRIDE
53 0 : { return *m_pPos1; }
54 0 : virtual const OUString& GetName() const SAL_OVERRIDE
55 0 : { return m_aName; }
56 0 : virtual SwPosition& GetOtherMarkPos() const SAL_OVERRIDE
57 : {
58 : OSL_PRECOND(IsExpanded(), "<SwPosition::GetOtherMarkPos(..)> - I have no other Pos set." );
59 0 : return *m_pPos2;
60 : }
61 0 : virtual SwPosition& GetMarkStart() const SAL_OVERRIDE
62 : {
63 0 : if( !IsExpanded() ) return GetMarkPos( );
64 0 : if ( GetMarkPos( ) < GetOtherMarkPos( ) )
65 0 : return GetMarkPos();
66 : else
67 0 : return GetOtherMarkPos( );
68 : }
69 0 : virtual SwPosition& GetMarkEnd() const SAL_OVERRIDE
70 : {
71 0 : if( !IsExpanded() ) return GetMarkPos();
72 0 : if ( GetMarkPos( ) >= GetOtherMarkPos( ) )
73 0 : return GetMarkPos( );
74 : else
75 0 : return GetOtherMarkPos( );
76 : }
77 :
78 : virtual bool IsCoveringPosition(const SwPosition& rPos) const SAL_OVERRIDE;
79 0 : virtual bool IsExpanded() const SAL_OVERRIDE
80 0 : { return static_cast< bool >(m_pPos2); }
81 :
82 0 : virtual void SetName(const OUString& rName)
83 0 : { m_aName = rName; }
84 : virtual void SetMarkPos(const SwPosition& rNewPos);
85 : virtual void SetOtherMarkPos(const SwPosition& rNewPos);
86 0 : virtual void ClearOtherMarkPos()
87 0 : { m_pPos2.reset(); }
88 :
89 : virtual OUString ToString( ) const SAL_OVERRIDE;
90 :
91 0 : virtual void Swap()
92 : {
93 0 : if(m_pPos2)
94 0 : m_pPos1.swap(m_pPos2);
95 0 : }
96 :
97 0 : virtual void InitDoc(SwDoc* const)
98 : {
99 0 : }
100 :
101 : virtual ~MarkBase();
102 :
103 : const ::com::sun::star::uno::WeakReference<
104 0 : ::com::sun::star::text::XTextContent> & GetXBookmark() const
105 0 : { return m_wXBookmark; }
106 0 : void SetXBookmark(::com::sun::star::uno::Reference<
107 : ::com::sun::star::text::XTextContent> const& xBkmk)
108 0 : { m_wXBookmark = xBkmk; }
109 :
110 : protected:
111 : // SwClient
112 : virtual void Modify( const SfxPoolItem* pOld, const SfxPoolItem *pNew ) SAL_OVERRIDE;
113 :
114 : MarkBase(const SwPaM& rPaM, const OUString& rName);
115 : ::boost::scoped_ptr<SwPosition> m_pPos1;
116 : ::boost::scoped_ptr<SwPosition> m_pPos2;
117 : OUString m_aName;
118 : static OUString GenerateNewName(const OUString& rPrefix);
119 :
120 : ::com::sun::star::uno::WeakReference<
121 : ::com::sun::star::text::XTextContent> m_wXBookmark;
122 : };
123 :
124 0 : class NavigatorReminder
125 : : public MarkBase
126 : {
127 : public:
128 : NavigatorReminder(const SwPaM& rPaM);
129 : };
130 :
131 0 : class UnoMark
132 : : public MarkBase
133 : {
134 : public:
135 : UnoMark(const SwPaM& rPaM);
136 : };
137 :
138 : class DdeBookmark
139 : : public MarkBase
140 : {
141 : public:
142 : DdeBookmark(const SwPaM& rPaM);
143 :
144 : const SwServerObject* GetRefObject() const
145 : { return &m_aRefObj; }
146 0 : SwServerObject* GetRefObject()
147 0 : { return &m_aRefObj; }
148 :
149 0 : bool IsServer() const
150 0 : { return m_aRefObj.Is(); }
151 :
152 : void SetRefObject( SwServerObject* pObj );
153 :
154 : void DeregisterFromDoc(SwDoc* const pDoc);
155 : virtual ~DdeBookmark();
156 :
157 : private:
158 : SwServerObjectRef m_aRefObj;
159 : };
160 :
161 0 : class Bookmark
162 : : virtual public IBookmark
163 : , public DdeBookmark
164 : , public ::sfx2::Metadatable
165 : {
166 : public:
167 : Bookmark(const SwPaM& rPaM,
168 : const KeyCode& rCode,
169 : const OUString& rName,
170 : const OUString& rShortName);
171 : virtual void InitDoc(SwDoc* const io_Doc) SAL_OVERRIDE;
172 :
173 0 : virtual const OUString& GetShortName() const SAL_OVERRIDE
174 0 : { return m_sShortName; }
175 0 : virtual const KeyCode& GetKeyCode() const SAL_OVERRIDE
176 0 : { return m_aCode; }
177 0 : virtual void SetShortName(const OUString& rShortName) SAL_OVERRIDE
178 0 : { m_sShortName = rShortName; }
179 0 : virtual void SetKeyCode(const KeyCode& rCode) SAL_OVERRIDE
180 0 : { m_aCode = rCode; }
181 :
182 : // ::sfx2::Metadatable
183 : virtual ::sfx2::IXmlIdRegistry& GetRegistry() SAL_OVERRIDE;
184 : virtual bool IsInClipboard() const SAL_OVERRIDE;
185 : virtual bool IsInUndo() const SAL_OVERRIDE;
186 : virtual bool IsInContent() const SAL_OVERRIDE;
187 : virtual ::com::sun::star::uno::Reference<
188 : ::com::sun::star::rdf::XMetadatable > MakeUnoObject() SAL_OVERRIDE;
189 :
190 : private:
191 : KeyCode m_aCode;
192 : OUString m_sShortName;
193 : };
194 :
195 0 : class Fieldmark
196 : : virtual public IFieldmark
197 : , public MarkBase
198 : {
199 : public:
200 : Fieldmark(const SwPaM& rPaM);
201 :
202 0 : virtual OUString GetFieldname() const SAL_OVERRIDE
203 0 : { return m_aFieldname; }
204 0 : virtual OUString GetFieldHelptext() const SAL_OVERRIDE
205 0 : { return m_aFieldHelptext; }
206 :
207 0 : virtual IFieldmark::parameter_map_t* GetParameters() SAL_OVERRIDE
208 0 : { return &m_vParams; }
209 :
210 0 : virtual const IFieldmark::parameter_map_t* GetParameters() const SAL_OVERRIDE
211 0 : { return &m_vParams; }
212 :
213 0 : virtual void SetFieldname(const OUString& aFieldname) SAL_OVERRIDE
214 0 : { m_aFieldname = aFieldname; }
215 0 : virtual void SetFieldHelptext(const OUString& aFieldHelptext) SAL_OVERRIDE
216 0 : { m_aFieldHelptext = aFieldHelptext; }
217 :
218 : virtual void ReleaseDoc(SwDoc* const) = 0;
219 :
220 : void SetMarkStartPos( const SwPosition& rNewStartPos );
221 : void SetMarkEndPos( const SwPosition& rNewEndPos );
222 :
223 : virtual void Invalidate() SAL_OVERRIDE;
224 : virtual OUString ToString() const SAL_OVERRIDE;
225 :
226 : private:
227 : OUString m_aFieldname;
228 : OUString m_aFieldHelptext;
229 : IFieldmark::parameter_map_t m_vParams;
230 : };
231 :
232 0 : class TextFieldmark
233 : : public Fieldmark
234 : {
235 : public:
236 : TextFieldmark(const SwPaM& rPaM);
237 : virtual void InitDoc(SwDoc* const io_pDoc) SAL_OVERRIDE;
238 : virtual void ReleaseDoc(SwDoc* const pDoc) SAL_OVERRIDE;
239 : };
240 :
241 0 : class CheckboxFieldmark
242 : : virtual public ICheckboxFieldmark
243 : , public Fieldmark
244 : {
245 : public:
246 : CheckboxFieldmark(const SwPaM& rPaM);
247 : virtual void InitDoc(SwDoc* const io_pDoc) SAL_OVERRIDE;
248 : virtual void ReleaseDoc(SwDoc* const pDoc) SAL_OVERRIDE;
249 : bool IsChecked() const SAL_OVERRIDE;
250 : void SetChecked(bool checked) SAL_OVERRIDE;
251 :
252 : virtual OUString toString( ) const;
253 : };
254 : }
255 : }
256 : #endif
257 :
258 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|