1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 #ifndef _MAILMERGEHELPER_HXX
24 #define _MAILMERGEHELPER_HXX
25 
26 #include <svtools/stdctrl.hxx>
27 #include <unotools/configitem.hxx>
28 #include <com/sun/star/uno/Sequence.h>
29 #include "com/sun/star/mail/XAuthenticator.hpp"
30 #include "com/sun/star/mail/XConnectionListener.hpp"
31 #include "com/sun/star/uno/XCurrentContext.hpp"
32 #include "com/sun/star/mail/XMailMessage.hpp"
33 #include "com/sun/star/datatransfer/XTransferable.hpp"
34 #include <com/sun/star/beans/XPropertySet.hpp>
35 #include <cppuhelper/implbase1.hxx>
36 #include <cppuhelper/compbase1.hxx>
37 #include <cppuhelper/compbase2.hxx>
38 #include <vcl/scrbar.hxx>
39 #include "swdllapi.h"
40 
41 
42 class SwMailMergeConfigItem;
43 namespace com{ namespace sun{ namespace star{
44     namespace uno{
45         class XComponentContext;
46     }
47     namespace lang{
48         class XMultiServiceFactory;
49     }
50     namespace mail{
51         class XSmtpService;
52         class XMailService;
53     }
54 }}}
55 /*-- 14.06.2004 12:27:42---------------------------------------------------
56 
57   -----------------------------------------------------------------------*/
58 namespace SwMailMergeHelper
59 {
60     SW_DLLPUBLIC String  CallSaveAsDialog(String& rFilter);
61     SW_DLLPUBLIC bool    CheckMailAddress( const ::rtl::OUString& rMailAddress );
62     SW_DLLPUBLIC com::sun::star::uno::Reference< com::sun::star::mail::XSmtpService >
63                          ConnectToSmtpServer( SwMailMergeConfigItem& rConfigItem,
64                             com::sun::star::uno::Reference< com::sun::star::mail::XMailService >&  xInMailService,
65                             const String& rInMailServerPassword,
66                             const String& rOutMailServerPassword,
67                             Window* pDialogParentWindow = 0 );
68 }
69 /* -----------------06.04.2004 10:29-----------------
70 
71  --------------------------------------------------*/
72 class SW_DLLPUBLIC SwBoldFixedInfo : public FixedInfo
73 {
74 public:
75     SwBoldFixedInfo(Window* pParent, const ResId& rResId);
76     ~SwBoldFixedInfo();
77 };
78 struct SwAddressPreview_Impl;
79 namespace com{namespace sun{namespace star{
80     namespace container{
81         class XNameAccess;
82     }
83 }}}
84 
85 /*-- 27.04.2004 13:20:00---------------------------------------------------
86     Preview window used to show the possible selection of address blocks
87     and also the resulting address filled with database data
88   -----------------------------------------------------------------------*/
89 class SW_DLLPUBLIC SwAddressPreview : public Window
90 {
91     ScrollBar               aVScrollBar;
92     SwAddressPreview_Impl*  pImpl;
93     Link                    m_aSelectHdl;
94 
95     void DrawText_Impl( const ::rtl::OUString& rAddress, const Point& rTopLeft, const Size& rSize, bool bIsSelected);
96 
97     virtual void        Paint(const Rectangle&);
98     virtual void        MouseButtonDown( const MouseEvent& rMEvt );
99     virtual void        KeyInput( const KeyEvent& rKEvt );
100     virtual void        StateChanged( StateChangedType nStateChange );
101     void                UpdateScrollBar();
102 
103     DECL_LINK(ScrollHdl, ScrollBar*);
104 
105 public:
106     SwAddressPreview(Window* pParent, const ResId rResId);
107     ~SwAddressPreview();
108 
109     /** The address string is a list of address elements separated by spaces
110     and breaks. The addresses fit into the given layout. If more addresses then
111     rows/columns should be used a scrollbar will be added.
112 
113      AddAddress appends the new address to the already added ones.
114      Initially the first added address will be selected
115     */
116     void                    AddAddress(const ::rtl::OUString& rAddress);
117     //  for preview mode - replaces the currently used address by the given one
118     void                    SetAddress(const ::rtl::OUString& rAddress);
119     // removes all addresses
120     void                    Clear();
121 
122     // returns the selected address
123     sal_uInt16              GetSelectedAddress() const;
124     void                    SelectAddress(sal_uInt16 nSelect);
125     void                    ReplaceSelectedAddress(const ::rtl::OUString&);
126     void                    RemoveSelectedAddress();
127 
128     // set the number of rows and columns of addresses
129     void                    SetLayout(sal_uInt16 nRows, sal_uInt16 nColumns);
130     void                    EnableScrollBar(bool bEnable = true);
131 
132     // fill the actual data into a string (address block or greeting)
133     static String FillData(
134             const ::rtl::OUString& rAddress,
135             SwMailMergeConfigItem& rConfigItem,
136             const ::com::sun::star::uno::Sequence< ::rtl::OUString>* pAssignments = 0);
137 
SetSelectHdl(const Link & rLink)138     void    SetSelectHdl (const Link& rLink) {m_aSelectHdl = rLink;}
139 };
140 
141 /*-- 11.05.2004 15:39:59---------------------------------------------------
142     iterate over an address block or a greeting line
143     the iterator returns the parts either as pure string
144     or as column
145   -----------------------------------------------------------------------*/
146 struct SwMergeAddressItem
147 {
148     String  sText;
149     bool    bIsColumn;
150     bool    bIsReturn;
SwMergeAddressItemSwMergeAddressItem151     SwMergeAddressItem() :
152         bIsColumn(false),
153         bIsReturn(false) {}
154 };
155 class SW_DLLPUBLIC   SwAddressIterator
156 {
157     String sAddress;
158 public:
SwAddressIterator(const String & rAddress)159     SwAddressIterator(const String& rAddress) :
160         sAddress(rAddress){}
161 
162     SwMergeAddressItem  Next();
HasMore() const163     bool                HasMore() const{return sAddress.Len() > 0;}
164 };
165 
166 /*-- 21.05.2004 10:31:15---------------------------------------------------
167 
168   -----------------------------------------------------------------------*/
169 class SW_DLLPUBLIC SwAuthenticator :
170     public cppu::WeakImplHelper1< ::com::sun::star::mail::XAuthenticator>
171 {
172     ::rtl::OUString m_aUserName;
173     ::rtl::OUString m_aPassword;
174     Window*         m_pParentWindow;
175 public:
SwAuthenticator()176     SwAuthenticator() : m_pParentWindow(0) {}
SwAuthenticator(const::rtl::OUString & username,const::rtl::OUString & password,Window * pParent)177     SwAuthenticator(const ::rtl::OUString& username, const ::rtl::OUString& password, Window* pParent) :
178         m_aUserName(username),
179         m_aPassword(password),
180         m_pParentWindow( pParent )
181     {}
182     ~SwAuthenticator();
183 
184     virtual ::rtl::OUString SAL_CALL getUserName( ) throw (::com::sun::star::uno::RuntimeException);
185     virtual ::rtl::OUString SAL_CALL getPassword(  ) throw (::com::sun::star::uno::RuntimeException);
186 
187 };
188 /*-- 25.08.2004 12:48:47---------------------------------------------------
189 
190   -----------------------------------------------------------------------*/
191 class SW_DLLPUBLIC SwConnectionContext :
192     public cppu::WeakImplHelper1< ::com::sun::star::uno::XCurrentContext >
193 {
194     ::rtl::OUString     m_sMailServer;
195     sal_Int16           m_nPort;
196     ::rtl::OUString     m_sConnectionType;
197 
198 public:
199     SwConnectionContext(const ::rtl::OUString& rMailServer, sal_Int16 nPort, const ::rtl::OUString& rConnectionType);
200     ~SwConnectionContext();
201 
202     virtual ::com::sun::star::uno::Any SAL_CALL     getValueByName( const ::rtl::OUString& Name )
203                                                             throw (::com::sun::star::uno::RuntimeException);
204 };
205 /*-- 21.05.2004 10:39:20---------------------------------------------------
206 
207   -----------------------------------------------------------------------*/
208 class SwMutexBase
209 {
210 public:
211     osl::Mutex m_aMutex;
212 };
213 /*-- 21.05.2004 10:39:20---------------------------------------------------
214 
215   -----------------------------------------------------------------------*/
216 class SW_DLLPUBLIC SwConnectionListener :
217         public SwMutexBase,
218         public cppu::WeakComponentImplHelper1< ::com::sun::star::mail::XConnectionListener >
219 {
220     using cppu::WeakComponentImplHelperBase::disposing;
221 
222 public:
SwConnectionListener()223     SwConnectionListener() :
224         cppu::WeakComponentImplHelper1< ::com::sun::star::mail::XConnectionListener>(m_aMutex)
225     {}
226     ~SwConnectionListener();
227 
228     virtual void SAL_CALL connected(const ::com::sun::star::lang::EventObject& aEvent)
229         throw (::com::sun::star::uno::RuntimeException);
230 
231     virtual void SAL_CALL disconnected(const ::com::sun::star::lang::EventObject& aEvent)
232         throw (::com::sun::star::uno::RuntimeException);
233 
234     virtual void SAL_CALL disposing(const com::sun::star::lang::EventObject& aEvent)
235         throw(com::sun::star::uno::RuntimeException);
236 };
237 
238 /*-- 13.07.2004 09:02:12---------------------------------------------------
239 
240   -----------------------------------------------------------------------*/
241 class SwMailTransferable :
242         public SwMutexBase,
243         public cppu::WeakComponentImplHelper2
244         <
245             ::com::sun::star::datatransfer::XTransferable,
246             ::com::sun::star::beans::XPropertySet
247         >
248 {
249     rtl::OUString  m_aMimeType;
250     rtl::OUString  m_sBody;
251     rtl::OUString  m_aURL;
252     rtl::OUString  m_aName;
253     bool           m_bIsBody;
254 
255     public:
256     SwMailTransferable(const rtl::OUString& rURL, const rtl::OUString& rName, const rtl::OUString& rMimeType);
257     SwMailTransferable(const rtl::OUString& rBody, const rtl::OUString& rMimeType);
258     ~SwMailTransferable();
259     virtual ::com::sun::star::uno::Any SAL_CALL
260                         getTransferData( const ::com::sun::star::datatransfer::DataFlavor& aFlavor )
261                             throw (::com::sun::star::datatransfer::UnsupportedFlavorException, ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException);
262     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::datatransfer::DataFlavor > SAL_CALL
263                         getTransferDataFlavors(  )
264                             throw (::com::sun::star::uno::RuntimeException) ;
265     virtual ::sal_Bool SAL_CALL
266                         isDataFlavorSupported( const ::com::sun::star::datatransfer::DataFlavor& aFlavor )
267                             throw (::com::sun::star::uno::RuntimeException);
268 
269     //XPropertySet
270     virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo(  ) throw(::com::sun::star::uno::RuntimeException);
271     virtual void SAL_CALL setPropertyValue( const ::rtl::OUString& aPropertyName, const ::com::sun::star::uno::Any& aValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
272     virtual ::com::sun::star::uno::Any SAL_CALL getPropertyValue( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
273     virtual void SAL_CALL addPropertyChangeListener( const ::rtl::OUString& aPropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& xListener ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
274     virtual void SAL_CALL removePropertyChangeListener( const ::rtl::OUString& aPropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& aListener ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
275     virtual void SAL_CALL addVetoableChangeListener( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XVetoableChangeListener >& aListener ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
276     virtual void SAL_CALL removeVetoableChangeListener( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XVetoableChangeListener >& aListener ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
277 
278 };
279 
280 /*-- 22.06.2004 16:38:34---------------------------------------------------
281 
282   -----------------------------------------------------------------------*/
283 class SwMailMessage :
284         public SwMutexBase,
285         public cppu::WeakComponentImplHelper1< ::com::sun::star::mail::XMailMessage >
286 {
287     ::rtl::OUString                                                                         m_sSenderName;
288     ::rtl::OUString                                                                         m_sSenderAddress;
289     ::rtl::OUString                                                                         m_sReplyToAddress;
290     ::rtl::OUString                                                                         m_sSubject;
291 
292     ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::XTransferable>        m_xBody;
293 //    ::com::sun::star::mail::MailMessageBody                                                 m_aBody;
294 
295     ::com::sun::star::uno::Sequence< ::rtl::OUString >                                      m_aRecipients;
296     ::com::sun::star::uno::Sequence< ::rtl::OUString >                                      m_aCcRecipients;
297     ::com::sun::star::uno::Sequence< ::rtl::OUString >                                      m_aBccRecipients;
298 //    ::com::sun::star::uno::Sequence< ::com::sun::star::mail::MailAttachmentDescriptor >     m_aAttachments;
299     ::com::sun::star::uno::Sequence<  ::com::sun::star::mail::MailAttachment >              m_aAttachments;
300 public:
301     SwMailMessage();
302     ~SwMailMessage();
303 
304     // Attributes
305     virtual ::rtl::OUString SAL_CALL    getSenderName() throw (::com::sun::star::uno::RuntimeException);
306     virtual ::rtl::OUString SAL_CALL    getSenderAddress() throw (::com::sun::star::uno::RuntimeException);
307     virtual ::rtl::OUString SAL_CALL    getReplyToAddress() throw (::com::sun::star::uno::RuntimeException);
308     virtual void SAL_CALL               setReplyToAddress( const ::rtl::OUString& _replytoaddress ) throw (::com::sun::star::uno::RuntimeException);
309     virtual ::rtl::OUString SAL_CALL    getSubject() throw (::com::sun::star::uno::RuntimeException);
310     virtual void SAL_CALL               setSubject( const ::rtl::OUString& _subject ) throw (::com::sun::star::uno::RuntimeException);
311 
312     virtual ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::XTransferable > SAL_CALL
313                                         getBody()
314                                                 throw (::com::sun::star::uno::RuntimeException);
315     virtual void SAL_CALL               setBody( const ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::XTransferable >& _body )
316                                                 throw (::com::sun::star::uno::RuntimeException);
317 
318     // Methods
319     virtual void SAL_CALL               addRecipient( const ::rtl::OUString& sRecipientAddress ) throw (::com::sun::star::uno::RuntimeException);
320     virtual void SAL_CALL               addCcRecipient( const ::rtl::OUString& sRecipientAddress ) throw (::com::sun::star::uno::RuntimeException);
321     virtual void SAL_CALL               addBccRecipient( const ::rtl::OUString& sRecipientAddress ) throw (::com::sun::star::uno::RuntimeException);
322     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL
323                                         getRecipients(  ) throw (::com::sun::star::uno::RuntimeException);
324     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL
325                                         getCcRecipients(  ) throw (::com::sun::star::uno::RuntimeException);
326     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL
327                                         getBccRecipients(  ) throw (::com::sun::star::uno::RuntimeException);
328     virtual void SAL_CALL               addAttachment( const ::com::sun::star::mail::MailAttachment& aMailAttachment )
329                                             throw (::com::sun::star::uno::RuntimeException);
330     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::mail::MailAttachment > SAL_CALL
331                                         getAttachments(  ) throw (::com::sun::star::uno::RuntimeException);
SetSenderName(const::rtl::OUString & rSenderName)332     void                                SetSenderName(const ::rtl::OUString& rSenderName)
333                                                 {m_sSenderName = rSenderName;}
SetSenderAddress(const::rtl::OUString & rSenderAddress)334     void                                SetSenderAddress(const ::rtl::OUString& rSenderAddress)
335                                                 {m_sSenderAddress = rSenderAddress;}
336 };
337 /*-- 21.05.2004 10:17:22---------------------------------------------------
338 
339   -----------------------------------------------------------------------*/
340 SW_DLLPUBLIC ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext>
341         getCurrentCmpCtx(
342             ::com::sun::star::uno::Reference<
343                 ::com::sun::star::lang::XMultiServiceFactory> rSrvMgr);
344 #endif
345 
346