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 #ifndef INCLUDED_SFX2_EVENT_HXX
20 #define INCLUDED_SFX2_EVENT_HXX
21 
22 #include <sal/config.h>
23 
24 #include <ostream>
25 
26 #include <sfx2/dllapi.h>
27 #include <svl/hint.hxx>
28 #include <unotools/eventcfg.hxx>
29 #include <rtl/ustring.hxx>
30 
31 #include <com/sun/star/uno/Sequence.hxx>
32 #include <com/sun/star/frame/XController2.hpp>
33 #include <com/sun/star/view/PrintableState.hpp>
34 
35 namespace com::sun::star::beans { struct PropertyValue; }
36 
37 /**
38   these values get stored in streams in a 16-bit value
39 */
40 enum class SvMacroItemId : sal_uInt16 {
41     NONE                 = 0,
42 
43     // used by SwHTMLForm_Impl
44     HtmlOnSubmitForm,
45     HtmlOnResetForm,
46     HtmlOnGetFocus,
47     HtmlOnLoseFocus,
48     HtmlOnClick,
49     HtmlOnClickItem,
50     HtmlOnChange,
51     HtmlOnSelect,
52 
53     // used by SwHTMLParser
54     OpenDoc,
55     PrepareCloseDoc,
56     ActivateDoc,
57     DeactivateDoc,
58 
59     // Events for Controls etc.
60     OnMouseOver          =  5100,
61     OnClick              =  5101,
62     OnMouseOut           =  5102,
63 
64     OnImageLoadDone      = 10000,
65     OnImageLoadCancel    = 10001,
66     OnImageLoadError     = 10002,
67 
68     SwObjectSelect       = 20000,
69     SwStartInsGlossary   = 20001,
70     SwEndInsGlossary     = 20002,
71     SwFrmKeyInputAlpha   = 20004,
72     SwFrmKeyInputNoAlpha = 20005,
73     SwFrmResize          = 20006,
74     SwFrmMove            = 20007,
75 };
76 
77 template< typename charT, typename traits >
operator <<(std::basic_ostream<charT,traits> & stream,const SvMacroItemId & id)78 inline std::basic_ostream<charT, traits> & operator <<(
79     std::basic_ostream<charT, traits> & stream, const SvMacroItemId& id )
80 {
81     switch(id)
82     {
83     case SvMacroItemId::NONE: return stream << "NONE";
84     case SvMacroItemId::HtmlOnSubmitForm: return stream << "HtmlOnSubmitForm";
85     case SvMacroItemId::HtmlOnResetForm: return stream << "HtmlOnResetForm";
86     case SvMacroItemId::HtmlOnGetFocus: return stream << "HtmlOnGetFocus";
87     case SvMacroItemId::HtmlOnLoseFocus: return stream << "HtmlOnLoseFocus";
88     case SvMacroItemId::HtmlOnClick: return stream << "HtmlOnClick";
89     case SvMacroItemId::HtmlOnClickItem: return stream << "HtmlOnClickItem";
90     case SvMacroItemId::HtmlOnChange: return stream << "HtmlOnChange";
91     case SvMacroItemId::HtmlOnSelect: return stream << "HtmlOnSelect";
92     case SvMacroItemId::OpenDoc: return stream << "OpenDoc";
93     case SvMacroItemId::PrepareCloseDoc: return stream << "PrepareCloseDoc";
94     case SvMacroItemId::ActivateDoc: return stream << "ActivateDoc";
95     case SvMacroItemId::DeactivateDoc: return stream << "DeactivateDoc";
96     case SvMacroItemId::OnMouseOver: return stream << "OnMouseOver";
97     case SvMacroItemId::OnClick: return stream << "OnClick";
98     case SvMacroItemId::OnMouseOut: return stream << "OnMouseOut";
99     case SvMacroItemId::OnImageLoadDone: return stream << "OnImageLoadDone";
100     case SvMacroItemId::OnImageLoadCancel: return stream << "OnImageLoadCancel";
101     case SvMacroItemId::OnImageLoadError: return stream << "OnImageLoadError";
102     case SvMacroItemId::SwObjectSelect: return stream << "SwObjectSelect";
103     case SvMacroItemId::SwStartInsGlossary: return stream << "SwStartInsGlossary";
104     case SvMacroItemId::SwEndInsGlossary: return stream << "SwEndInsGlossary";
105     case SvMacroItemId::SwFrmKeyInputAlpha: return stream << "SwFrmKeyInputAlpha";
106     case SvMacroItemId::SwFrmKeyInputNoAlpha: return stream << "SwFrmKeyInputNoAlpha";
107     case SvMacroItemId::SwFrmResize: return stream << "SwFrmResize";
108     case SvMacroItemId::SwFrmMove: return stream << "SwFrmMove";
109     default: return stream << "unk(" << std::to_string(int(id)) << ")";
110     }
111 }
112 
113 class SfxObjectShell;
114 
115 enum class SfxEventHintId {
116     NONE = 0,
117     ActivateDoc,
118     CloseDoc,
119     CloseView,
120     CreateDoc,
121     DeactivateDoc,
122     DocCreated,
123     LoadFinished,
124     ModifyChanged,
125     OpenDoc,
126     PrepareCloseDoc,
127     PrepareCloseView,
128     PrintDoc,
129     SaveAsDoc,
130     SaveAsDocDone,
131     SaveAsDocFailed,
132     SaveDoc,
133     SaveDocDone,
134     SaveDocFailed,
135     SaveToDoc,
136     SaveToDocDone,
137     SaveToDocFailed,
138     StorageChanged,
139     ViewCreated,
140     VisAreaChanged,
141     // SW events
142     SwMailMerge,
143     SwMailMergeEnd,
144     SwEventPageCount,
145     SwEventFieldMerge,
146     SwEventFieldMergeFinished,
147     SwEventLayoutFinished,
148 };
149 
150 template< typename charT, typename traits >
operator <<(std::basic_ostream<charT,traits> & stream,const SfxEventHintId & id)151 inline std::basic_ostream<charT, traits> & operator <<(
152     std::basic_ostream<charT, traits> & stream, const SfxEventHintId& id )
153 {
154     switch(id)
155     {
156     case SfxEventHintId::NONE: return stream << "NONE";
157     case SfxEventHintId::ActivateDoc: return stream << "ActivateDoc";
158     case SfxEventHintId::CloseDoc: return stream << "CloseDoc";
159     case SfxEventHintId::CloseView: return stream << "CloseView";
160     case SfxEventHintId::CreateDoc: return stream << "CreateDoc";
161     case SfxEventHintId::DeactivateDoc: return stream << "DeactivateDoc";
162     case SfxEventHintId::DocCreated: return stream << "DocCreated";
163     case SfxEventHintId::LoadFinished: return stream << "LoadFinished";
164     case SfxEventHintId::ModifyChanged: return stream << "ModifyChanged";
165     case SfxEventHintId::OpenDoc: return stream << "OpenDoc";
166     case SfxEventHintId::PrepareCloseDoc: return stream << "PrepareCloseDoc";
167     case SfxEventHintId::PrepareCloseView: return stream << "PrepareCloseView";
168     case SfxEventHintId::PrintDoc: return stream << "PrintDoc";
169     case SfxEventHintId::SaveAsDoc: return stream << "SaveAsDoc";
170     case SfxEventHintId::SaveAsDocDone: return stream << "SaveAsDocDone";
171     case SfxEventHintId::SaveAsDocFailed: return stream << "SaveAsDocFailed";
172     case SfxEventHintId::SaveDoc: return stream << "SaveDoc";
173     case SfxEventHintId::SaveDocDone: return stream << "SaveDocDone";
174     case SfxEventHintId::SaveDocFailed: return stream << "SaveDocFailed";
175     case SfxEventHintId::SaveToDoc: return stream << "SaveToDoc";
176     case SfxEventHintId::SaveToDocDone: return stream << "SaveToDocDone";
177     case SfxEventHintId::SaveToDocFailed: return stream << "SaveToDocFailed";
178     case SfxEventHintId::StorageChanged: return stream << "StorageChanged";
179     case SfxEventHintId::ViewCreated: return stream << "ViewCreated";
180     case SfxEventHintId::VisAreaChanged: return stream << "VisAreaChanged";
181     case SfxEventHintId::SwMailMerge: return stream << "SwMailMerge";
182     case SfxEventHintId::SwMailMergeEnd: return stream << "SwMailMergeEnd";
183     case SfxEventHintId::SwEventPageCount: return stream << "SwEventPageCount";
184     case SfxEventHintId::SwEventFieldMerge: return stream << "SwEventFieldMerge";
185     case SfxEventHintId::SwEventFieldMergeFinished: return stream << "SwEventFieldMergeFinished";
186     case SfxEventHintId::SwEventLayoutFinished: return stream << "SwEventLayoutFinished";
187     default: return stream << "unk(" << std::to_string(int(id)) << ")";
188     }
189 }
190 
191 class SFX2_DLLPUBLIC SfxEventHint : public SfxHint
192 {
193     SfxObjectShell*     pObjShell;
194     OUString            aEventName;
195     SfxEventHintId      nEventId;
196 
197 public:
SfxEventHint(SfxEventHintId nId,const OUString & aName,SfxObjectShell * pObj)198     SfxEventHint( SfxEventHintId nId, const OUString& aName, SfxObjectShell *pObj )
199                         :   pObjShell(pObj),
200                             aEventName(aName),
201                             nEventId(nId)
202                         {}
203 
GetEventId() const204     SfxEventHintId      GetEventId() const
205                         { return nEventId; }
206 
GetEventName() const207     const OUString&     GetEventName() const
208                         { return aEventName; }
209 
GetObjShell() const210     SfxObjectShell*     GetObjShell() const
211                         { return pObjShell; }
212 };
213 
214 
215 class SFX2_DLLPUBLIC SfxViewEventHint : public SfxEventHint
216 {
217     css::uno::Reference< css::frame::XController2 > xViewController;
218 
219 public:
SfxViewEventHint(SfxEventHintId nId,const OUString & aName,SfxObjectShell * pObj,const css::uno::Reference<css::frame::XController> & xController)220     SfxViewEventHint( SfxEventHintId nId, const OUString& aName, SfxObjectShell *pObj, const css::uno::Reference< css::frame::XController >& xController )
221                         : SfxEventHint( nId, aName, pObj )
222                         , xViewController( xController, css::uno::UNO_QUERY )
223                         {}
224 
SfxViewEventHint(SfxEventHintId nId,const OUString & aName,SfxObjectShell * pObj,const css::uno::Reference<css::frame::XController2> & xController)225     SfxViewEventHint( SfxEventHintId nId, const OUString& aName, SfxObjectShell *pObj, const css::uno::Reference< css::frame::XController2 >& xController )
226                         : SfxEventHint( nId, aName, pObj )
227                         , xViewController( xController )
228                         {}
229 
GetController() const230     const css::uno::Reference< css::frame::XController2 >& GetController() const
231                         { return xViewController; }
232 };
233 
234 class SfxPrintingHint final : public SfxViewEventHint
235 {
236     css::view::PrintableState mnPrintableState;
237     css::uno::Sequence < css::beans::PropertyValue > aOpts;
238 public:
SfxPrintingHint(css::view::PrintableState nState,const css::uno::Sequence<css::beans::PropertyValue> & rOpts,SfxObjectShell * pObj,const css::uno::Reference<css::frame::XController2> & xController)239         SfxPrintingHint(
240                 css::view::PrintableState nState,
241                 const css::uno::Sequence < css::beans::PropertyValue >& rOpts,
242                 SfxObjectShell *pObj,
243                 const css::uno::Reference< css::frame::XController2 >& xController )
244         : SfxViewEventHint(
245             SfxEventHintId::PrintDoc,
246             GlobalEventConfig::GetEventName( GlobalEventId::PRINTDOC ),
247             pObj,
248             xController )
249         , mnPrintableState( nState )
250         , aOpts( rOpts )
251         {}
252 
SfxPrintingHint(css::view::PrintableState nState)253         SfxPrintingHint( css::view::PrintableState nState )
254         : SfxViewEventHint(
255             SfxEventHintId::PrintDoc,
256             GlobalEventConfig::GetEventName( GlobalEventId::PRINTDOC ),
257             nullptr,
258             css::uno::Reference< css::frame::XController >() )
259         , mnPrintableState( nState )
260         {}
261 
GetWhich() const262     css::view::PrintableState GetWhich() const { return mnPrintableState; }
GetOptions() const263     const css::uno::Sequence < css::beans::PropertyValue >& GetOptions() const { return aOpts; }
264 };
265 
266 #endif
267 
268 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
269