xref: /AOO41X/main/cui/source/dialogs/hlmailtp.cxx (revision 2ee96f1cdb99d49425d866b1ec4c5567f37285e6)
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 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_cui.hxx"
26 
27 #include <com/sun/star/frame/XDispatchProvider.hpp>
28 #include <com/sun/star/util/XURLTransformer.hpp>
29 #include <com/sun/star/frame/FrameSearchFlag.hpp>
30 #include <sfx2/request.hxx>
31 
32 #include <comphelper/processfactory.hxx>
33 #include <sfx2/viewfrm.hxx>
34 #include <unotools/pathoptions.hxx>
35 #include <unotools/moduleoptions.hxx>
36 
37 #include "hlmailtp.hxx"
38 #include "hyperdlg.hrc"
39 
40 using namespace ::rtl;
41 using namespace ::com::sun::star;
42 
43 /*************************************************************************
44 |*
45 |* Contructor / Destructor
46 |*
47 |************************************************************************/
48 
SvxHyperlinkMailTp(Window * pParent,const SfxItemSet & rItemSet)49 SvxHyperlinkMailTp::SvxHyperlinkMailTp ( Window *pParent, const SfxItemSet& rItemSet)
50 :   SvxHyperlinkTabPageBase ( pParent, CUI_RES( RID_SVXPAGE_HYPERLINK_MAIL ),
51                               rItemSet ),
52     maGrpMailNews   ( this, CUI_RES (GRP_MAILNEWS) ),
53     maRbtMail       ( this, CUI_RES (RB_LINKTYP_MAIL) ),
54     maRbtNews       ( this, CUI_RES (RB_LINKTYP_NEWS) ),
55     maFtReceiver    ( this, CUI_RES (FT_RECEIVER) ),
56     maCbbReceiver   ( this, INET_PROT_MAILTO ),
57     maBtAdrBook     ( this, CUI_RES (BTN_ADRESSBOOK) ),
58     maFtSubject     ( this, CUI_RES (FT_SUBJECT) ),
59     maEdSubject     ( this, CUI_RES (ED_SUBJECT) )
60 {
61     // Set HC bitmaps and disable display of bitmap names.
62     maBtAdrBook.SetModeImage( Image( CUI_RES( IMG_ADRESSBOOK_HC ) ), BMP_COLOR_HIGHCONTRAST );
63     maBtAdrBook.EnableTextDisplay (sal_False);
64 
65     InitStdControls();
66     FreeResource();
67 
68     // Init URL-Box (pos&size, Open-Handler)
69     maCbbReceiver.SetPosSizePixel ( LogicToPixel( Point( COL_2, 25 ), MAP_APPFONT ),
70                                     LogicToPixel( Size ( 176 - COL_DIFF, 60), MAP_APPFONT ) );
71 
72     maCbbReceiver.Show();
73     maCbbReceiver.SetHelpId( HID_HYPERDLG_MAIL_PATH );
74 
75     SetExchangeSupport ();
76 
77     // set defaults
78     maRbtMail.Check ();
79 
80     // overload handlers
81     maRbtMail.SetClickHdl        ( LINK ( this, SvxHyperlinkMailTp, Click_SmartProtocol_Impl ) );
82     maRbtNews.SetClickHdl        ( LINK ( this, SvxHyperlinkMailTp, Click_SmartProtocol_Impl ) );
83     maBtAdrBook.SetClickHdl      ( LINK ( this, SvxHyperlinkMailTp, ClickAdrBookHdl_Impl ) );
84     maCbbReceiver.SetModifyHdl   ( LINK ( this, SvxHyperlinkMailTp, ModifiedReceiverHdl_Impl) );
85 
86     if ( !SvtModuleOptions().IsModuleInstalled( SvtModuleOptions::E_SDATABASE ) )
87         maBtAdrBook.Hide();
88 
89     maBtAdrBook.SetAccessibleRelationMemberOf( &maGrpMailNews );
90     maBtAdrBook.SetAccessibleRelationLabeledBy( &maFtReceiver );
91 }
92 
~SvxHyperlinkMailTp()93 SvxHyperlinkMailTp::~SvxHyperlinkMailTp ()
94 {
95 }
96 
97 /*************************************************************************
98 |*
99 |* Fill the all dialog-controls except controls in groupbox "more..."
100 |*
101 |************************************************************************/
102 
FillDlgFields(String & aStrURL)103 void SvxHyperlinkMailTp::FillDlgFields ( String& aStrURL )
104 {
105     const sal_Char sMailtoScheme[] = INET_MAILTO_SCHEME;
106 
107     INetURLObject aURL( aStrURL );
108     String aStrScheme = GetSchemeFromURL( aStrURL );
109 
110     // set URL-field and additional controls
111     String aStrURLc ( aStrURL );
112     // set additional controls for EMail:
113     if ( aStrScheme.SearchAscii( sMailtoScheme ) == 0 )
114     {
115         // Find mail-subject
116         String aStrSubject, aStrTmp ( aStrURLc );
117 
118         const sal_Char sSubject[] = "subject";
119         xub_StrLen nPos = aStrTmp.ToLowerAscii().SearchAscii( sSubject, 0 );
120         nPos = aStrTmp.Search( sal_Unicode( '=' ), nPos );
121 
122         if ( nPos != STRING_NOTFOUND )
123             aStrSubject = aStrURLc.Copy( nPos+1, aStrURLc.Len() );
124 
125         nPos = aStrURLc.Search ( sal_Unicode( '?' ), 0);
126 
127         aStrURLc = aStrURLc.Copy( 0, ( nPos == STRING_NOTFOUND ?
128                                            aStrURLc.Len() : nPos ) );
129 
130         maEdSubject.SetText ( aStrSubject );
131     }
132     else
133     {
134         maEdSubject.SetText (aEmptyStr);
135     }
136 
137     maCbbReceiver.SetText ( aStrURLc );
138 
139     SetScheme( aStrScheme );
140 }
141 
142 /*************************************************************************
143 |*
144 |* retrieve and prepare data from dialog-fields
145 |*
146 |************************************************************************/
147 
GetCurentItemData(String & aStrURL,String & aStrName,String & aStrIntName,String & aStrFrame,SvxLinkInsertMode & eMode)148 void SvxHyperlinkMailTp::GetCurentItemData ( String& aStrURL, String& aStrName,
149                                              String& aStrIntName, String& aStrFrame,
150                                              SvxLinkInsertMode& eMode )
151 {
152     aStrURL = CreateAbsoluteURL();
153     GetDataFromCommonFields( aStrName, aStrIntName, aStrFrame, eMode );
154 }
155 
CreateAbsoluteURL() const156 String SvxHyperlinkMailTp::CreateAbsoluteURL() const
157 {
158     String aStrURL = maCbbReceiver.GetText();
159     INetURLObject aURL(aStrURL);
160 
161     if( aURL.GetProtocol() == INET_PROT_NOT_VALID )
162     {
163         aURL.SetSmartProtocol( GetSmartProtocolFromButtons() );
164         aURL.SetSmartURL(aStrURL);
165     }
166 
167     // subject for EMail-url
168     if( aURL.GetProtocol() == INET_PROT_MAILTO )
169     {
170         if ( maEdSubject.GetText() != aEmptyStr )
171         {
172             String aQuery = UniString::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "subject=" ) );
173             aQuery.Append( maEdSubject.GetText() );
174             aURL.SetParam(aQuery);
175         }
176     }
177 
178     if ( aURL.GetProtocol() != INET_PROT_NOT_VALID )
179         return aURL.GetMainURL( INetURLObject::DECODE_WITH_CHARSET );
180     else //#105788# always create a URL even if it is not valid
181         return aStrURL;
182 }
183 
184 /*************************************************************************
185 |*
186 |* static method to create Tabpage
187 |*
188 |************************************************************************/
189 
Create(Window * pWindow,const SfxItemSet & rItemSet)190 IconChoicePage* SvxHyperlinkMailTp::Create( Window* pWindow, const SfxItemSet& rItemSet )
191 {
192     return( new SvxHyperlinkMailTp( pWindow, rItemSet ) );
193 }
194 
195 /*************************************************************************
196 |*
197 |* Set initial focus
198 |*
199 |************************************************************************/
200 
SetInitFocus()201 void SvxHyperlinkMailTp::SetInitFocus()
202 {
203     maCbbReceiver.GrabFocus();
204 }
205 
206 /*************************************************************************
207 |************************************************************************/
208 
SetScheme(const String & aScheme)209 void SvxHyperlinkMailTp::SetScheme( const String& aScheme )
210 {
211     //if  aScheme is empty or unknown the default beaviour is like it where MAIL
212     const sal_Char sNewsScheme[]   = INET_NEWS_SCHEME;
213 
214     sal_Bool bMail = aScheme.SearchAscii( sNewsScheme ) != 0;
215 
216     //update protocol button selection:
217     maRbtMail.Check(bMail);
218     maRbtNews.Check(!bMail);
219 
220     //update target:
221     RemoveImproperProtocol(aScheme);
222     maCbbReceiver.SetSmartProtocol( GetSmartProtocolFromButtons() );
223 
224     //show/hide  special fields for MAIL:
225     maFtSubject.Enable(bMail);
226     maEdSubject.Enable(bMail);
227 }
228 
229 /*************************************************************************
230 |*
231 |* Remove protocol if it does not fit to the current button selection
232 |*
233 |************************************************************************/
234 
RemoveImproperProtocol(const String & aProperScheme)235 void SvxHyperlinkMailTp::RemoveImproperProtocol(const String& aProperScheme)
236 {
237     String aStrURL ( maCbbReceiver.GetText() );
238     if ( aStrURL != aEmptyStr )
239     {
240         String aStrScheme = GetSchemeFromURL( aStrURL );
241         if ( aStrScheme != aEmptyStr && aStrScheme != aProperScheme )
242         {
243             aStrURL.Erase ( 0, aStrScheme.Len() );
244             maCbbReceiver.SetText ( aStrURL );
245         }
246     }
247 }
248 
GetSchemeFromButtons() const249 String SvxHyperlinkMailTp::GetSchemeFromButtons() const
250 {
251     if( maRbtNews.IsChecked() )
252     {
253         return String::CreateFromAscii( INET_NEWS_SCHEME );
254     }
255     return String::CreateFromAscii( INET_MAILTO_SCHEME );
256 }
257 
GetSmartProtocolFromButtons() const258 INetProtocol SvxHyperlinkMailTp::GetSmartProtocolFromButtons() const
259 {
260     if( maRbtNews.IsChecked() )
261     {
262         return INET_PROT_NEWS;
263     }
264     return INET_PROT_MAILTO;
265 }
266 
267 /*************************************************************************
268 |*
269 |* Click on radiobutton : Type EMail
270 |*
271 |************************************************************************/
272 
IMPL_LINK(SvxHyperlinkMailTp,Click_SmartProtocol_Impl,void *,EMPTYARG)273 IMPL_LINK ( SvxHyperlinkMailTp, Click_SmartProtocol_Impl, void *, EMPTYARG )
274 {
275     String aScheme = GetSchemeFromButtons();
276     SetScheme( aScheme );
277     return( 0L );
278 }
279 
280 /*************************************************************************
281 |*
282 |* Contens of editfield "receiver" modified
283 |*
284 |************************************************************************/
285 
IMPL_LINK(SvxHyperlinkMailTp,ModifiedReceiverHdl_Impl,void *,EMPTYARG)286 IMPL_LINK ( SvxHyperlinkMailTp, ModifiedReceiverHdl_Impl, void *, EMPTYARG )
287 {
288     String aScheme = GetSchemeFromURL( maCbbReceiver.GetText() );
289     if(aScheme.Len()!=0)
290         SetScheme( aScheme );
291 
292     return( 0L );
293 }
294 
295 /*************************************************************************
296 |*
297 |* Click on imagebutton : addressbook
298 |*
299 |************************************************************************/
300 
IMPL_LINK(SvxHyperlinkMailTp,ClickAdrBookHdl_Impl,void *,EMPTYARG)301 IMPL_LINK ( SvxHyperlinkMailTp, ClickAdrBookHdl_Impl, void *, EMPTYARG )
302 {
303     SfxViewFrame* pViewFrame = SfxViewFrame::Current();
304     if( pViewFrame )
305     {
306         SfxItemPool &rPool = pViewFrame->GetPool();
307         SfxRequest aReq(SID_VIEW_DATA_SOURCE_BROWSER, 0, rPool);
308         pViewFrame->ExecuteSlot( aReq, sal_True );
309     }
310 
311 
312 /*  uno::Reference< frame::XDispatchProvider > xProv( pViewFrame->GetFrame().GetFrameInterface(), uno::UNO_QUERY );
313     if ( xProv.is() )
314     {
315 !!! (pb) we need a new config item here
316         SfxAppIniManagerProperty aProp;
317         GetpApp()->Property( aProp );
318         if( !aProp.GetIniManager() )
319             return ( 0L );
320 
321         String aAddressBook = aProp.GetIniManager()->Get( SFX_KEY_ADDRESSBOOK );
322         INetURLObject aObj;
323         aObj.SetSmartProtocol( INET_PROT_FILE );
324         aObj.SetURL( aAddressBook.GetToken( 0, sal_Unicode( ';' ) ) );
325 
326         String aMark( RTL_CONSTASCII_USTRINGPARAM( "db:Table;" ) );
327         aMark += aAddressBook.GetToken( 1, sal_Unicode( ';' ) );
328         aObj.SetMark( aMark );
329 
330         util::URL aURL;
331         aURL.Complete = ::rtl::OUString( aObj.GetMainURL( INetURLObject::NO_DECODE ) );
332 
333         uno::Reference< lang::XMultiServiceFactory > xFactory( ::comphelper::getProcessServiceFactory() );
334         if( xFactory.is() )
335         {
336             uno::Reference< util::XURLTransformer > xTrans( xFactory->createInstance
337                 ( OUString::createFromAscii( "com.sun.star.util.URLTransformer" ) ),
338                                   uno::UNO_QUERY);
339             xTrans->parseStrict( aURL );
340 
341             uno::Reference< frame::XDispatch > aDisp = xProv->queryDispatch( aURL,
342                                                         OUString::createFromAscii( "_beamer" ),
343                                                         frame::FrameSearchFlag::GLOBAL |
344                                                         frame::FrameSearchFlag::CREATE );
345             if ( aDisp.is() )
346             {
347                 uno::Sequence< beans::PropertyValue > aArgs(1);
348                 beans::PropertyValue* pArg = aArgs.getArray();
349                 pArg[0].Name = DEFINE_CONST_UNICODE("Referer");
350                 pArg[0].Value = uno::makeAny( OUString( DEFINE_CONST_UNICODE("private:user") ) );
351                 aDisp->dispatch( aURL, aArgs );
352             }
353         }
354     }
355 */
356 
357     return( 0L );
358 }
359 
360 
361