Branch data Line data Source code
1 : : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : : /*************************************************************************
3 : : *
4 : : * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 : : *
6 : : * Copyright 2000, 2010 Oracle and/or its affiliates.
7 : : *
8 : : * OpenOffice.org - a multi-platform office productivity suite
9 : : *
10 : : * This file is part of OpenOffice.org.
11 : : *
12 : : * OpenOffice.org is free software: you can redistribute it and/or modify
13 : : * it under the terms of the GNU Lesser General Public License version 3
14 : : * only, as published by the Free Software Foundation.
15 : : *
16 : : * OpenOffice.org is distributed in the hope that it will be useful,
17 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 : : * GNU Lesser General Public License version 3 for more details
20 : : * (a copy is included in the LICENSE file that accompanied this code).
21 : : *
22 : : * You should have received a copy of the GNU Lesser General Public License
23 : : * version 3 along with OpenOffice.org. If not, see
24 : : * <http://www.openoffice.org/license.html>
25 : : * for a copy of the LGPLv3 License.
26 : : *
27 : : ************************************************************************/
28 : :
29 : :
30 : : #include "htmlex.hxx"
31 : : #include <com/sun/star/document/XExporter.hpp>
32 : : #include <com/sun/star/lang/XMultiServiceFactory.hpp>
33 : : #include <com/sun/star/document/XFilter.hpp>
34 : : #include <com/sun/star/ucb/SimpleFileAccess.hpp>
35 : :
36 : : #include <rtl/uri.hxx>
37 : : #include <comphelper/processfactory.hxx>
38 : : #include <osl/file.hxx>
39 : : #include <tools/fsys.hxx>
40 : : #include <unotools/pathoptions.hxx>
41 : : #include <svtools/FilterConfigItem.hxx>
42 : : #include <unotools/ucbstreamhelper.hxx>
43 : : #include <unotools/localfilehelper.hxx>
44 : : #include <com/sun/star/frame/XStorable.hpp>
45 : : #include <sfx2/progress.hxx>
46 : : #include <vcl/wrkwin.hxx>
47 : : #include <svl/aeitem.hxx>
48 : : #include <svx/svditer.hxx>
49 : : #include <svtools/imaprect.hxx>
50 : : #include <svtools/imapcirc.hxx>
51 : : #include <svtools/imappoly.hxx>
52 : : #include <vcl/msgbox.hxx>
53 : : #include <sfx2/app.hxx>
54 : : #include <editeng/outlobj.hxx>
55 : : #include <editeng/editobj.hxx>
56 : : #include <svx/svdopath.hxx>
57 : : #include <svx/xoutbmp.hxx>
58 : : #include <svtools/htmlout.hxx>
59 : : #include <sfx2/docfile.hxx>
60 : : #include <vcl/cvtgrf.hxx>
61 : : #include <svtools/colorcfg.hxx>
62 : : #include <svtools/filter.hxx>
63 : : #include <editeng/colritem.hxx>
64 : : #include <editeng/editeng.hxx>
65 : : #include <editeng/wghtitem.hxx>
66 : : #include <editeng/udlnitem.hxx>
67 : : #include <editeng/postitem.hxx>
68 : : #include <editeng/crsditem.hxx>
69 : : #include <editeng/flditem.hxx>
70 : : #include <sfx2/dispatch.hxx>
71 : : #include <sfx2/fcontnr.hxx>
72 : : #include <svl/style.hxx>
73 : : #include <editeng/frmdiritem.hxx>
74 : : #include <svx/svdoutl.hxx>
75 : : #include <tools/urlobj.hxx> // INetURLObject
76 : : #include <vcl/bmpacc.hxx>
77 : : #include <svtools/sfxecode.hxx>
78 : : #include <com/sun/star/beans/PropertyState.hpp>
79 : : #include <tools/resmgr.hxx>
80 : : #include "comphelper/anytostring.hxx"
81 : : #include "cppuhelper/exc_hlp.hxx"
82 : :
83 : : #include "drawdoc.hxx"
84 : : #include "Outliner.hxx"
85 : : #include "sdpage.hxx"
86 : : #include "sdattr.hxx"
87 : : #include "glob.hrc"
88 : : #include "anminfo.hxx"
89 : : #include "imapinfo.hxx"
90 : : #include "sdresid.hxx"
91 : : #include "buttonset.hxx"
92 : : #include <basegfx/polygon/b2dpolygon.hxx>
93 : :
94 : : using ::rtl::OUString;
95 : : using ::rtl::OString;
96 : : using namespace ::com::sun::star;
97 : : using namespace ::com::sun::star::uno;
98 : : using namespace ::com::sun::star::beans;
99 : : using namespace ::com::sun::star::frame;
100 : : using namespace ::com::sun::star::lang;
101 : : using namespace ::com::sun::star::document;
102 : :
103 : : #define KEY_QUALITY "JPG-EXPORT-QUALITY"
104 : :
105 : : // Parameter aus Itemset abfragen
106 : :
107 : : #define RESTOHTML( res ) StringToHTMLString(String(SdResId(res)))
108 : : #define S2H( str ) StringToHTMLString( str )
109 : :
110 : : // bei Aenderungen auch NUM_BUTTONS in pubdlg.hxx aendern!!
111 : : const char *pButtonNames[NUM_BUTTONS] =
112 : : {
113 : : "first-inactive.png",
114 : : "first.png",
115 : : "left-inactive.png",
116 : : "left.png",
117 : : "right-inactive.png",
118 : : "right.png",
119 : : "last-inactive.png",
120 : : "last.png",
121 : : "home.png",
122 : : "text.png",
123 : : "expand.png",
124 : : "collapse.png",
125 : : };
126 : :
127 : : #define BTN_FIRST_0 0
128 : : #define BTN_FIRST_1 1
129 : : #define BTN_PREV_0 2
130 : : #define BTN_PREV_1 3
131 : : #define BTN_NEXT_0 4
132 : : #define BTN_NEXT_1 5
133 : : #define BTN_LAST_0 6
134 : : #define BTN_LAST_1 7
135 : : #define BTN_INDEX 8
136 : : #define BTN_TEXT 9
137 : : #define BTN_MORE 10
138 : : #define BTN_LESS 11
139 : :
140 : : // *********************************************************************
141 : : // Hilfsklasse fuer das simple erzeugen von Dateien lokal/remote
142 : : // *********************************************************************
143 : : class EasyFile
144 : : {
145 : : private:
146 : : SvStream* pOStm;
147 : : SfxMedium* pMedium;
148 : : bool bOpen;
149 : :
150 : : public:
151 : :
152 : : EasyFile();
153 : : ~EasyFile();
154 : :
155 : : sal_uLong createStream( const String& rUrl, SvStream*& rpStr );
156 : : sal_uLong createFileName( const String& rUrl, String& rFileName );
157 : : sal_uLong close();
158 : : };
159 : :
160 : : // *********************************************************************
161 : : // Hilfsklasse fuer das einbinden von Textattributen in die Html-Ausgabe
162 : : // *********************************************************************
163 [ # # ]: 0 : class HtmlState
164 : : {
165 : : private:
166 : : bool mbColor;
167 : : bool mbWeight;
168 : : bool mbItalic;
169 : : bool mbUnderline;
170 : : bool mbStrike;
171 : : bool mbLink;
172 : : Color maColor;
173 : : Color maDefColor;
174 : : String maLink;
175 : : String maTarget;
176 : :
177 : : public:
178 : : HtmlState( Color aDefColor );
179 : :
180 : : String SetWeight( bool bWeight );
181 : : String SetItalic( bool bItalic );
182 : : String SetUnderline( bool bUnderline );
183 : : String SetColor( Color aColor );
184 : : String SetStrikeout( bool bStrike );
185 : : String SetLink( const String& aLink, const String& aTarget );
186 : : String Flush();
187 : : };
188 : :
189 : : // =====================================================================
190 : : // alle noch offennen Tags schliessen
191 : : // =====================================================================
192 : 0 : String HtmlState::Flush()
193 : : {
194 [ # # ][ # # ]: 0 : String aStr, aEmpty;
195 : :
196 [ # # ][ # # ]: 0 : aStr += SetWeight(false);
[ # # ]
197 [ # # ][ # # ]: 0 : aStr += SetItalic(false);
[ # # ]
198 [ # # ][ # # ]: 0 : aStr += SetUnderline(false);
[ # # ]
199 [ # # ][ # # ]: 0 : aStr += SetStrikeout(false);
[ # # ]
200 [ # # ][ # # ]: 0 : aStr += SetColor(maDefColor);
[ # # ]
201 [ # # ][ # # ]: 0 : aStr += SetLink(aEmpty,aEmpty);
[ # # ]
202 : :
203 [ # # ]: 0 : return aStr;
204 : : }
205 : :
206 : : // =====================================================================
207 : : // c'tor mit Defaultfarbe fuer die Seite
208 : : // =====================================================================
209 [ # # ]: 0 : HtmlState::HtmlState( Color aDefColor )
210 : : {
211 : 0 : mbColor = false;
212 : 0 : mbWeight = false;
213 : 0 : mbItalic = false;
214 : 0 : mbUnderline = false;
215 : 0 : mbLink = false;
216 : 0 : mbStrike = false;
217 : 0 : maDefColor = aDefColor;
218 : 0 : }
219 : :
220 : : // =====================================================================
221 : : // aktiviert/deaktiviert Fettdruck
222 : : // =====================================================================
223 : 0 : String HtmlState::SetWeight( bool bWeight )
224 : : {
225 : 0 : String aStr;
226 : :
227 [ # # ][ # # ]: 0 : if(bWeight && !mbWeight)
228 [ # # ]: 0 : aStr.AppendAscii( "<b>" );
229 [ # # ][ # # ]: 0 : else if(!bWeight && mbWeight)
230 [ # # ]: 0 : aStr.AppendAscii( "</b>" );
231 : :
232 : 0 : mbWeight = bWeight;
233 : 0 : return aStr;
234 : : }
235 : :
236 : : // =====================================================================
237 : : // aktiviert/deaktiviert Italic
238 : : // =====================================================================
239 : 0 : String HtmlState::SetItalic( bool bItalic )
240 : : {
241 : 0 : String aStr;
242 : :
243 [ # # ][ # # ]: 0 : if(bItalic && !mbItalic)
244 [ # # ]: 0 : aStr.AppendAscii( "<i>" );
245 [ # # ][ # # ]: 0 : else if(!bItalic && mbItalic)
246 [ # # ]: 0 : aStr.AppendAscii( "</i>" );
247 : :
248 : 0 : mbItalic = bItalic;
249 : 0 : return aStr;
250 : : }
251 : :
252 : : // =====================================================================
253 : : // aktiviert/deaktiviert Unterstrichen
254 : : // =====================================================================
255 : 0 : String HtmlState::SetUnderline( bool bUnderline )
256 : : {
257 : 0 : String aStr;
258 : :
259 [ # # ][ # # ]: 0 : if(bUnderline && !mbUnderline)
260 [ # # ]: 0 : aStr.AppendAscii( "<u>" );
261 [ # # ][ # # ]: 0 : else if(!bUnderline && mbUnderline)
262 [ # # ]: 0 : aStr.AppendAscii( "</u>" );
263 : :
264 : 0 : mbUnderline = bUnderline;
265 : 0 : return aStr;
266 : : }
267 : :
268 : : // =====================================================================
269 : : // aktiviert/deaktiviert Durchstreichen
270 : : // =====================================================================
271 : 0 : String HtmlState::SetStrikeout( bool bStrike )
272 : : {
273 : 0 : String aStr;
274 : :
275 [ # # ][ # # ]: 0 : if(bStrike && !mbStrike)
276 [ # # ]: 0 : aStr.AppendAscii( "<strike>" );
277 [ # # ][ # # ]: 0 : else if(!bStrike && mbStrike)
278 [ # # ]: 0 : aStr.AppendAscii( "</strike>" );
279 : :
280 : 0 : mbStrike = bStrike;
281 : 0 : return aStr;
282 : : }
283 : :
284 : : // =====================================================================
285 : : // Setzt die angegebenne Textfarbe
286 : : // =====================================================================
287 : 0 : String HtmlState::SetColor( Color aColor )
288 : : {
289 : 0 : String aStr;
290 : :
291 [ # # ][ # # ]: 0 : if(mbColor && aColor == maColor)
[ # # ]
292 : 0 : return aStr;
293 : :
294 [ # # ]: 0 : if(mbColor)
295 : : {
296 [ # # ]: 0 : aStr.AppendAscii( "</font>" );
297 : 0 : mbColor = false;
298 : : }
299 : :
300 [ # # ]: 0 : if(aColor != maDefColor)
301 : : {
302 : 0 : maColor = aColor;
303 : :
304 [ # # ]: 0 : aStr.AppendAscii( "<font color=\"" );
305 [ # # ][ # # ]: 0 : aStr += HtmlExport::ColorToHTMLString(aColor);
[ # # ]
306 [ # # ]: 0 : aStr.AppendAscii( "\">" );
307 : :
308 : 0 : mbColor = true;
309 : : }
310 : :
311 : 0 : return aStr;
312 : : }
313 : :
314 : : // =====================================================================
315 : : // aktiviert/deaktiviert einen Hyperlink
316 : : // =====================================================================
317 : 0 : String HtmlState::SetLink( const String& aLink, const String& aTarget )
318 : : {
319 : 0 : String aStr;
320 : :
321 [ # # ][ # # ]: 0 : if(mbLink&&maLink == aLink&&maTarget==aTarget)
[ # # ][ # # ]
[ # # ][ # # ]
322 : 0 : return aStr;
323 : :
324 [ # # ]: 0 : if(mbLink)
325 : : {
326 [ # # ]: 0 : aStr.AppendAscii( "</a>" );
327 : 0 : mbLink = false;
328 : : }
329 : :
330 [ # # ]: 0 : if(aLink.Len())
331 : : {
332 [ # # ]: 0 : aStr.AppendAscii( "<a href=\"" );
333 [ # # ][ # # ]: 0 : aStr += HtmlExport::StringToURL(aLink);
[ # # ]
334 [ # # ]: 0 : if(aTarget.Len())
335 : : {
336 [ # # ]: 0 : aStr.AppendAscii( "\" target=\"" );
337 [ # # ]: 0 : aStr += aTarget;
338 : : }
339 [ # # ]: 0 : aStr.AppendAscii( "\">" );
340 : 0 : mbLink = true;
341 [ # # ]: 0 : maLink = aLink;
342 [ # # ]: 0 : maTarget = aTarget;
343 : : }
344 : :
345 : 0 : return aStr;
346 : : }
347 : :
348 : : // *********************************************************************
349 : : // class HtmlExport Methoden
350 : : // *********************************************************************
351 : :
352 : 0 : static String getParagraphStyle( SdrOutliner* pOutliner, sal_uInt16 nPara )
353 : : {
354 [ # # ]: 0 : SfxItemSet aParaSet( pOutliner->GetParaAttribs( nPara ) );
355 : :
356 [ # # ]: 0 : String sStyle( RTL_CONSTASCII_USTRINGPARAM("direction:") );
357 [ # # ][ # # ]: 0 : if( static_cast<const SvxFrameDirectionItem*>(aParaSet.GetItem( EE_PARA_WRITINGDIR ))->GetValue() == FRMDIR_HORI_RIGHT_TOP )
358 : : {
359 [ # # ][ # # ]: 0 : sStyle += String( RTL_CONSTASCII_USTRINGPARAM("rtl;") );
[ # # ]
360 : : }
361 : : else
362 : : {
363 [ # # ][ # # ]: 0 : sStyle += String( RTL_CONSTASCII_USTRINGPARAM("ltr;") );
[ # # ]
364 : : }
365 [ # # ]: 0 : return sStyle;
366 : : }
367 : :
368 : : // =====================================================================
369 : : // Konstruktor fuer die Html Export Hilfsklasse
370 : : // =====================================================================
371 : 0 : HtmlExport::HtmlExport(
372 : : OUString aPath,
373 : : const Sequence< PropertyValue >& rParams,
374 : : SdDrawDocument* pExpDoc,
375 : : ::sd::DrawDocShell* pDocShell )
376 : : : maPath( aPath ),
377 : : mpDoc(pExpDoc),
378 : : mpDocSh( pDocShell ),
379 : : meEC(NULL),
380 : : meMode( PUBLISH_HTML ),
381 : : mbContentsPage(false),
382 : : mnButtonThema(-1),
383 : : mnWidthPixel( PUB_MEDRES_WIDTH ),
384 : : meFormat( FORMAT_JPG ),
385 : : mbNotes(false),
386 : : mnCompression( -1 ),
387 : : mbDownload( false ),
388 : : mbSlideSound(true),
389 : : mbHiddenSlides(true),
390 : : mbUserAttr(false),
391 : : mbDocColors(false),
392 : : maHTMLExtension(SdResId(STR_HTMLEXP_DEFAULT_EXTENSION)),
393 : : mpHTMLFiles(NULL),
394 : : mpImageFiles(NULL),
395 : : mpThumbnailFiles(NULL),
396 : : mpPageNames(NULL),
397 : : mpTextFiles(NULL),
398 : : maIndexUrl("index"),
399 : : meScript( SCRIPT_ASP ),
400 : : maHTMLHeader(
401 : : "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\r\n"
402 : : " \"http://www.w3.org/TR/html4/transitional.dtd\">\r\n"
403 : : "<html>\r\n<head>\r\n" ),
404 [ # # ][ # # ]: 0 : mpButtonSet( new ButtonSet() )
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
405 : : {
406 : 0 : bool bChange = mpDoc->IsChanged();
407 : :
408 [ # # ]: 0 : maIndexUrl += maHTMLExtension;
409 : :
410 [ # # ]: 0 : InitExportParameters( rParams );
411 : :
412 [ # # # # ]: 0 : switch( meMode )
413 : : {
414 : : case PUBLISH_HTML:
415 : : case PUBLISH_FRAMES:
416 [ # # ]: 0 : ExportHtml();
417 : 0 : break;
418 : : case PUBLISH_WEBCAST:
419 [ # # ]: 0 : ExportWebCast();
420 : 0 : break;
421 : : case PUBLISH_KIOSK:
422 [ # # ]: 0 : ExportKiosk();
423 : 0 : break;
424 : : }
425 : :
426 [ # # ]: 0 : mpDoc->SetChanged(bChange);
427 : 0 : }
428 : :
429 [ # # ][ # # ]: 0 : HtmlExport::~HtmlExport()
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ]
430 : : {
431 : : // ------------------------------------------------------------------
432 : : // Listen loeschen
433 : : // ------------------------------------------------------------------
434 [ # # ][ # # ]: 0 : if(mpImageFiles && mpHTMLFiles && mpThumbnailFiles && mpPageNames && mpTextFiles )
[ # # ][ # # ]
[ # # ]
435 : : {
436 [ # # ]: 0 : for ( sal_uInt16 nSdPage = 0; nSdPage < mnSdPageCount; nSdPage++)
437 : : {
438 [ # # ][ # # ]: 0 : delete mpImageFiles[nSdPage];
439 [ # # ][ # # ]: 0 : delete mpHTMLFiles[nSdPage];
440 [ # # ][ # # ]: 0 : delete mpThumbnailFiles[nSdPage];
441 [ # # ][ # # ]: 0 : delete mpPageNames[nSdPage];
442 [ # # ][ # # ]: 0 : delete mpTextFiles[nSdPage];
443 : : }
444 : : }
445 : :
446 [ # # ]: 0 : delete[] mpImageFiles;
447 [ # # ]: 0 : delete[] mpHTMLFiles;
448 [ # # ]: 0 : delete[] mpThumbnailFiles;
449 [ # # ]: 0 : delete[] mpPageNames;
450 [ # # ]: 0 : delete[] mpTextFiles;
451 [ # # ]: 0 : }
452 : :
453 : : /** get common export parameters from item set */
454 : 0 : void HtmlExport::InitExportParameters( const Sequence< PropertyValue >& rParams )
455 : : {
456 [ # # ][ # # ]: 0 : mbImpress = mpDoc && mpDoc->GetDocumentType() == DOCUMENT_TYPE_IMPRESS;
457 : :
458 : 0 : sal_Int32 nArgs = rParams.getLength();
459 : 0 : const PropertyValue* pParams = rParams.getConstArray();
460 : 0 : OUString aStr;
461 [ # # ]: 0 : while( nArgs-- )
462 : : {
463 [ # # ]: 0 : if ( pParams->Name == "PublishMode" )
464 : : {
465 : 0 : sal_Int32 temp = 0;
466 : 0 : pParams->Value >>= temp;
467 : 0 : meMode = (HtmlPublishMode)temp;
468 : : }
469 [ # # ]: 0 : else if ( pParams->Name == "IndexURL" )
470 : : {
471 : 0 : pParams->Value >>= aStr;
472 [ # # ]: 0 : maIndexUrl = aStr;
473 : : }
474 [ # # ]: 0 : else if ( pParams->Name == "Format" )
475 : : {
476 : 0 : sal_Int32 temp = 0;
477 : 0 : pParams->Value >>= temp;
478 : 0 : meFormat = (PublishingFormat)temp;
479 : : }
480 [ # # ]: 0 : else if ( pParams->Name == "Compression" )
481 : : {
482 : 0 : pParams->Value >>= aStr;
483 [ # # ]: 0 : String aTmp( aStr );
484 [ # # ]: 0 : if(aTmp.Len())
485 : : {
486 [ # # ]: 0 : xub_StrLen nPos = aTmp.Search( '%' );
487 [ # # ]: 0 : if(nPos != STRING_NOTFOUND)
488 [ # # ]: 0 : aTmp.Erase(nPos,1);
489 [ # # ]: 0 : mnCompression = (sal_Int16)aTmp.ToInt32();
490 [ # # ]: 0 : }
491 : : }
492 [ # # ]: 0 : else if ( pParams->Name == "Width" )
493 : : {
494 : 0 : sal_Int32 temp = 0;
495 : 0 : pParams->Value >>= temp;
496 : 0 : mnWidthPixel = (sal_uInt16)temp;
497 : : }
498 [ # # ]: 0 : else if ( pParams->Name == "UseButtonSet" )
499 : : {
500 : 0 : sal_Int32 temp = 0;
501 : 0 : pParams->Value >>= temp;
502 : 0 : mnButtonThema = (sal_Int16)temp;
503 : : }
504 [ # # ]: 0 : else if ( pParams->Name == "IsExportNotes" )
505 : : {
506 [ # # ]: 0 : if( mbImpress )
507 : : {
508 : 0 : sal_Bool temp = sal_False;
509 : 0 : pParams->Value >>= temp;
510 : 0 : mbNotes = temp;
511 : : }
512 : : }
513 [ # # ]: 0 : else if ( pParams->Name == "IsExportContentsPage" )
514 : : {
515 : 0 : sal_Bool temp = sal_False;
516 : 0 : pParams->Value >>= temp;
517 : 0 : mbContentsPage = temp;
518 : : }
519 [ # # ]: 0 : else if ( pParams->Name == "Author" )
520 : : {
521 : 0 : pParams->Value >>= aStr;
522 [ # # ]: 0 : maAuthor = aStr;
523 : : }
524 [ # # ]: 0 : else if ( pParams->Name == "EMail" )
525 : : {
526 : 0 : pParams->Value >>= aStr;
527 [ # # ]: 0 : maEMail = aStr;
528 : : }
529 [ # # ]: 0 : else if ( pParams->Name == "HomepageURL" )
530 : : {
531 : 0 : pParams->Value >>= aStr;
532 [ # # ]: 0 : maHomePage = aStr;
533 : : }
534 [ # # ]: 0 : else if ( pParams->Name == "UserText" )
535 : : {
536 : 0 : pParams->Value >>= aStr;
537 [ # # ]: 0 : maInfo = aStr;
538 : : }
539 [ # # ]: 0 : else if ( pParams->Name == "EnableDownload" )
540 : : {
541 : 0 : sal_Bool temp = sal_False;
542 : 0 : pParams->Value >>= temp;
543 : 0 : mbDownload = temp;
544 : : }
545 [ # # ]: 0 : else if ( pParams->Name == "SlideSound" )
546 : : {
547 : 0 : sal_Bool temp = sal_True;
548 : 0 : pParams->Value >>= temp;
549 : 0 : mbSlideSound = temp;
550 : : }
551 [ # # ]: 0 : else if ( pParams->Name == "HiddenSlides" )
552 : : {
553 : 0 : sal_Bool temp = sal_True;
554 : 0 : pParams->Value >>= temp;
555 : 0 : mbHiddenSlides = temp;
556 : : }
557 [ # # ]: 0 : else if ( pParams->Name == "BackColor" )
558 : : {
559 : 0 : sal_Int32 temp = 0;
560 : 0 : pParams->Value >>= temp;
561 : 0 : maBackColor = temp;
562 : 0 : mbUserAttr = true;
563 : : }
564 [ # # ]: 0 : else if ( pParams->Name == "TextColor" )
565 : : {
566 : 0 : sal_Int32 temp = 0;
567 : 0 : pParams->Value >>= temp;
568 : 0 : maTextColor = temp;
569 : 0 : mbUserAttr = true;
570 : : }
571 [ # # ]: 0 : else if ( pParams->Name == "LinkColor" )
572 : : {
573 : 0 : sal_Int32 temp = 0;
574 : 0 : pParams->Value >>= temp;
575 : 0 : maLinkColor = temp;
576 : 0 : mbUserAttr = true;
577 : : }
578 [ # # ]: 0 : else if ( pParams->Name == "VLinkColor" )
579 : : {
580 : 0 : sal_Int32 temp = 0;
581 : 0 : pParams->Value >>= temp;
582 : 0 : maVLinkColor = temp;
583 : 0 : mbUserAttr = true;
584 : : }
585 [ # # ]: 0 : else if ( pParams->Name == "ALinkColor" )
586 : : {
587 : 0 : sal_Int32 temp = 0;
588 : 0 : pParams->Value >>= temp;
589 : 0 : maALinkColor = temp;
590 : 0 : mbUserAttr = true;
591 : : }
592 [ # # ]: 0 : else if ( pParams->Name == "IsUseDocumentColors" )
593 : : {
594 : 0 : sal_Bool temp = sal_False;
595 : 0 : pParams->Value >>= temp;
596 : 0 : mbDocColors = temp;
597 : : }
598 [ # # ]: 0 : else if ( pParams->Name == "KioskSlideDuration" )
599 : : {
600 : 0 : sal_Int32 temp = sal_False;
601 : 0 : pParams->Value >>= temp;
602 : 0 : mnSlideDuration = temp;
603 : 0 : mbAutoSlide = true;
604 : : }
605 [ # # ]: 0 : else if ( pParams->Name == "KioskEndless" )
606 : : {
607 : 0 : sal_Bool temp = sal_False;
608 : 0 : pParams->Value >>= temp;
609 : 0 : mbEndless = temp;
610 : : }
611 [ # # ]: 0 : else if ( pParams->Name == "WebCastCGIURL" )
612 : : {
613 : 0 : pParams->Value >>= aStr;
614 [ # # ]: 0 : maCGIPath = aStr;
615 : : }
616 [ # # ]: 0 : else if ( pParams->Name == "WebCastTargetURL" )
617 : : {
618 : 0 : pParams->Value >>= aStr;
619 [ # # ]: 0 : maURLPath = aStr;
620 : : }
621 [ # # ]: 0 : else if ( pParams->Name == "WebCastScriptLanguage" )
622 : : {
623 : 0 : pParams->Value >>= aStr;
624 [ # # ]: 0 : if ( aStr == "asp" )
625 : : {
626 : 0 : meScript = SCRIPT_ASP;
627 : : }
628 : : else
629 : : {
630 : 0 : meScript = SCRIPT_PERL;
631 : : }
632 : : }
633 : : else
634 : : {
635 : : OSL_FAIL("Unknown property for html export detected!");
636 : : }
637 : :
638 : 0 : pParams++;
639 : : }
640 : :
641 [ # # ]: 0 : if( meMode == PUBLISH_KIOSK )
642 : : {
643 : 0 : mbContentsPage = false;
644 : 0 : mbNotes = false;
645 : :
646 : : }
647 : :
648 : : // calculate image sizes
649 [ # # ]: 0 : SdPage* pPage = mpDoc->GetSdPage(0, PK_STANDARD);
650 [ # # ]: 0 : Size aTmpSize( pPage->GetSize() );
651 : 0 : double dRatio=((double)aTmpSize.Width())/aTmpSize.Height();
652 : :
653 : 0 : mnHeightPixel = (sal_uInt16)(mnWidthPixel/dRatio);
654 : :
655 : : //------------------------------------------------------------------
656 : : // Ziel ausklamuestern...
657 : :
658 [ # # ][ # # ]: 0 : INetURLObject aINetURLObj( maPath );
659 : : DBG_ASSERT( aINetURLObj.GetProtocol() != INET_PROT_NOT_VALID, "invalid URL" );
660 : :
661 [ # # ][ # # ]: 0 : maExportPath = aINetURLObj.GetPartBeforeLastName(); // with trailing '/'
662 [ # # ][ # # ]: 0 : maIndex = aINetURLObj.GetLastName();
663 : :
664 [ # # ]: 0 : mnSdPageCount = mpDoc->GetSdPageCount( PK_STANDARD );
665 [ # # ]: 0 : for( sal_uInt16 nPage = 0; nPage < mnSdPageCount; nPage++ )
666 : : {
667 [ # # ]: 0 : pPage = mpDoc->GetSdPage( nPage, PK_STANDARD );
668 : :
669 [ # # ][ # # ]: 0 : if( mbHiddenSlides || !pPage->IsExcluded() )
[ # # ]
670 : : {
671 [ # # ]: 0 : maPages.push_back( pPage );
672 [ # # ][ # # ]: 0 : maNotesPages.push_back( mpDoc->GetSdPage( nPage, PK_NOTES ) );
673 : : }
674 : : }
675 : 0 : mnSdPageCount = maPages.size();
676 : :
677 : 0 : mbFrames = meMode == PUBLISH_FRAMES;
678 : :
679 [ # # ][ # # ]: 0 : maDocFileName = maIndex;
680 : 0 : }
681 : :
682 : : ///////////////////////////////////////////////////////////////////////
683 : : // Exportiert das im Konstruktor angegebenne Impress Dokument nach HTML
684 : : ///////////////////////////////////////////////////////////////////////
685 : 0 : void HtmlExport::ExportHtml()
686 : : {
687 [ # # ]: 0 : if(mbUserAttr)
688 : : {
689 [ # # ]: 0 : if( maTextColor == COL_AUTO )
690 : : {
691 [ # # ]: 0 : if( !maBackColor.IsDark() )
692 : 0 : maTextColor = COL_BLACK;
693 : : }
694 : : }
695 [ # # ]: 0 : else if( mbDocColors )
696 : : {
697 : : // Standard Farben fuer das Farbschema 'Aus Dokument'
698 : 0 : SetDocColors();
699 : 0 : maFirstPageColor = maBackColor;
700 : : }
701 : :
702 : : // get name for downloadable presentation if needed
703 [ # # ]: 0 : if( mbDownload )
704 : : {
705 : : // Separator such und Extension ausblenden
706 : 0 : sal_uInt16 nSepPos = maDocFileName.Search( sal_Unicode('.') );
707 : :
708 [ # # ]: 0 : if(nSepPos != STRING_NOTFOUND)
709 : 0 : maDocFileName.Erase(nSepPos);
710 : :
711 : 0 : maDocFileName.AppendAscii( ".odp" );
712 : : }
713 : :
714 : : //////
715 : :
716 : 0 : sal_uInt16 nProgrCount = mnSdPageCount;
717 [ # # ]: 0 : nProgrCount += mbImpress?mnSdPageCount:0;
718 [ # # ]: 0 : nProgrCount += mbContentsPage?1:0;
719 [ # # ][ # # ]: 0 : nProgrCount += (mbFrames && mbNotes)?mnSdPageCount:0;
720 [ # # ]: 0 : nProgrCount += (mbFrames)?8:0;
721 : 0 : InitProgress( nProgrCount );
722 : :
723 : 0 : mpDocSh->SetWaitCursor( true );
724 : :
725 : : //------------------------------------------------------------------
726 : : // Exceptions sind doch was schoennes...
727 : :
728 : 0 : CreateFileNames();
729 : :
730 : : // this is not a true while
731 : : while( 1 )
732 : : {
733 [ # # ]: 0 : if( checkForExistingFiles() )
734 : 0 : break;
735 : :
736 [ # # ]: 0 : if( !CreateImagesForPresPages() )
737 : 0 : break;
738 : :
739 [ # # # # ]: 0 : if( mbContentsPage &&
[ # # ]
740 : 0 : !CreateImagesForPresPages( true ) )
741 : 0 : break;
742 : :
743 : :
744 [ # # ]: 0 : if( !CreateHtmlForPresPages() )
745 : 0 : break;
746 : :
747 [ # # ]: 0 : if( mbImpress )
748 [ # # ]: 0 : if( !CreateHtmlTextForPresPages() )
749 : 0 : break;
750 : :
751 [ # # ]: 0 : if( mbFrames )
752 : : {
753 [ # # ]: 0 : if( !CreateFrames() )
754 : 0 : break;
755 : :
756 [ # # ]: 0 : if( !CreateOutlinePages() )
757 : 0 : break;
758 : :
759 [ # # ]: 0 : if( !CreateNavBarFrames() )
760 : 0 : break;
761 : :
762 [ # # ][ # # ]: 0 : if( mbNotes && mbImpress )
763 [ # # ]: 0 : if( !CreateNotesPages() )
764 : 0 : break;
765 : :
766 : : }
767 : :
768 [ # # ]: 0 : if( mbContentsPage )
769 [ # # ]: 0 : if( !CreateContentPage() )
770 : 0 : break;
771 : :
772 [ # # ]: 0 : if( !CreateBitmaps() )
773 : 0 : break;
774 : :
775 : 0 : mpDocSh->SetWaitCursor( false );
776 : 0 : ResetProgress();
777 : :
778 [ # # ]: 0 : if( mbDownload )
779 : 0 : SavePresentation();
780 : :
781 : 0 : return;
782 : : }
783 : :
784 : : // if we get to this point the export was
785 : : // canceled by the user after an error
786 : 0 : mpDocSh->SetWaitCursor( false );
787 : 0 : ResetProgress();
788 : : }
789 : :
790 : : ///////////////////////////////////////////////////////////////////////
791 : :
792 : 0 : void HtmlExport::SetDocColors( SdPage* pPage )
793 : : {
794 [ # # ]: 0 : if( pPage == NULL )
795 [ # # ]: 0 : pPage = mpDoc->GetSdPage(0, PK_STANDARD);
796 : :
797 [ # # ]: 0 : svtools::ColorConfig aConfig;
798 [ # # ]: 0 : maVLinkColor = Color(aConfig.GetColorValue(svtools::LINKSVISITED).nColor);
799 [ # # ]: 0 : maALinkColor = Color(aConfig.GetColorValue(svtools::LINKS).nColor);
800 [ # # ]: 0 : maLinkColor = Color(aConfig.GetColorValue(svtools::LINKS).nColor);
801 : 0 : maTextColor = Color(COL_BLACK);
802 : :
803 : 0 : SfxStyleSheet* pSheet = NULL;
804 : :
805 [ # # ]: 0 : if( mpDoc->GetDocumentType() == DOCUMENT_TYPE_IMPRESS )
806 : : {
807 : : // Standard Textfarbe aus Outline-Vorlage der ersten Seite
808 [ # # ]: 0 : pSheet = pPage->GetStyleSheetForPresObj(PRESOBJ_OUTLINE);
809 [ # # ]: 0 : if(pSheet == NULL)
810 [ # # ]: 0 : pSheet = pPage->GetStyleSheetForPresObj(PRESOBJ_TEXT);
811 [ # # ]: 0 : if(pSheet == NULL)
812 [ # # ]: 0 : pSheet = pPage->GetStyleSheetForPresObj(PRESOBJ_TITLE);
813 : : }
814 : :
815 [ # # ]: 0 : if(pSheet == NULL)
816 : 0 : pSheet = mpDoc->GetDefaultStyleSheet();
817 : :
818 [ # # ]: 0 : if(pSheet)
819 : : {
820 [ # # ]: 0 : SfxItemSet& rSet = pSheet->GetItemSet();
821 [ # # ][ # # ]: 0 : if(rSet.GetItemState(EE_CHAR_COLOR,sal_True) == SFX_ITEM_ON)
822 [ # # ]: 0 : maTextColor = ((SvxColorItem*)rSet.GetItem(EE_CHAR_COLOR,sal_True))->GetValue();
823 : : }
824 : :
825 : : // Standard Hintergrundfarbe aus Background der MasterPage der ersten Seite
826 [ # # ]: 0 : maBackColor = pPage->GetPageBackgroundColor();
827 : :
828 [ # # ]: 0 : if( maTextColor == COL_AUTO )
829 : : {
830 [ # # ][ # # ]: 0 : if( !maBackColor.IsDark() )
831 : 0 : maTextColor = COL_BLACK;
832 [ # # ]: 0 : }
833 : 0 : }
834 : :
835 : : ///////////////////////////////////////////////////////////////////////
836 : :
837 : 0 : void HtmlExport::InitProgress( sal_uInt16 nProgrCount )
838 : : {
839 [ # # ][ # # ]: 0 : String aStr(SdResId(STR_CREATE_PAGES));
840 [ # # ][ # # ]: 0 : mpProgress = new SfxProgress( mpDocSh, aStr, nProgrCount );
[ # # ]
841 : 0 : }
842 : :
843 : : ///////////////////////////////////////////////////////////////////////
844 : :
845 : 0 : void HtmlExport::ResetProgress()
846 : : {
847 [ # # ]: 0 : delete mpProgress;
848 : 0 : mpProgress = NULL;
849 : 0 : }
850 : :
851 : : ///////////////////////////////////////////////////////////////////////
852 : :
853 : 0 : void HtmlExport::ExportKiosk()
854 : : {
855 : 0 : mnPagesWritten = 0;
856 : 0 : InitProgress( 2*mnSdPageCount );
857 : :
858 : 0 : CreateFileNames();
859 [ # # ]: 0 : if( !checkForExistingFiles() )
860 : : {
861 [ # # ]: 0 : if( CreateImagesForPresPages() )
862 : 0 : CreateHtmlForPresPages();
863 : : }
864 : :
865 : 0 : ResetProgress();
866 : 0 : }
867 : :
868 : : ///////////////////////////////////////////////////////////////////////
869 : : // Export Document with WebCast (TM) Technology
870 : : ///////////////////////////////////////////////////////////////////////
871 : 0 : void HtmlExport::ExportWebCast()
872 : : {
873 : 0 : mnPagesWritten = 0;
874 [ # # ]: 0 : InitProgress( mnSdPageCount + 9 );
875 : :
876 [ # # ]: 0 : mpDocSh->SetWaitCursor( sal_True );
877 : :
878 [ # # ]: 0 : CreateFileNames();
879 : :
880 [ # # ]: 0 : String aEmpty;
881 [ # # ]: 0 : if(maCGIPath.Len() == 0)
882 [ # # ]: 0 : maCGIPath.Assign( sal_Unicode('.') );
883 : :
884 [ # # ]: 0 : if( maCGIPath.GetChar( maCGIPath.Len() - 1 ) != sal_Unicode('/') )
885 [ # # ]: 0 : maCGIPath.Append( sal_Unicode('/') );
886 : :
887 [ # # ]: 0 : if( meScript == SCRIPT_ASP )
888 : : {
889 [ # # ]: 0 : maURLPath.AssignAscii( "./" );
890 : : }
891 : : else
892 : : {
893 [ # # ]: 0 : String aEmpty2;
894 [ # # ]: 0 : if(maURLPath.Len() == 0)
895 [ # # ]: 0 : maURLPath.Assign( sal_Unicode('.') );
896 : :
897 [ # # ]: 0 : if( maURLPath.GetChar( maURLPath.Len() - 1 ) != sal_Unicode('/') )
898 [ # # ][ # # ]: 0 : maURLPath.Append( sal_Unicode('/') );
899 : : }
900 : :
901 : : // this is not a true while
902 : : while(1)
903 : : {
904 [ # # ][ # # ]: 0 : if( checkForExistingFiles() )
905 : 0 : break;
906 : :
907 [ # # ][ # # ]: 0 : if(!CreateImagesForPresPages())
908 : 0 : break;
909 : :
910 [ # # ]: 0 : if( meScript == SCRIPT_ASP )
911 : : {
912 [ # # ][ # # ]: 0 : if(!CreateASPScripts())
913 : 0 : break;
914 : : }
915 : : else
916 : : {
917 [ # # ][ # # ]: 0 : if(!CreatePERLScripts())
918 : 0 : break;
919 : : }
920 : :
921 [ # # ][ # # ]: 0 : if(!CreateImageFileList())
922 : 0 : break;
923 : :
924 [ # # ][ # # ]: 0 : if(!CreateImageNumberFile())
925 : 0 : break;
926 : :
927 : 0 : break;
928 : : }
929 : :
930 [ # # ]: 0 : mpDocSh->SetWaitCursor( false );
931 [ # # ][ # # ]: 0 : ResetProgress();
932 : 0 : }
933 : :
934 : : ///////////////////////////////////////////////////////////////////////
935 : : // Save the presentation as a downloadable file in the dest directory
936 : : ///////////////////////////////////////////////////////////////////////
937 : :
938 : 0 : bool HtmlExport::SavePresentation()
939 : : {
940 [ # # ]: 0 : meEC.SetContext( STR_HTMLEXP_ERROR_CREATE_FILE, maDocFileName );
941 : :
942 [ # # ]: 0 : OUString aURL( maExportPath );
943 [ # # ]: 0 : aURL += maDocFileName;
944 : :
945 : :
946 [ # # ]: 0 : mpDocSh->EnableSetModified( true );
947 : :
948 : : try
949 : : {
950 [ # # ][ # # ]: 0 : uno::Reference< frame::XStorable > xStorable( mpDoc->getUnoModel(), uno::UNO_QUERY );
951 [ # # ]: 0 : if( xStorable.is() )
952 : : {
953 [ # # ]: 0 : uno::Sequence< beans::PropertyValue > aProperties( 2 );
954 [ # # ]: 0 : aProperties[ 0 ].Name = "Overwrite";
955 [ # # ][ # # ]: 0 : aProperties[ 0 ].Value <<= (sal_Bool)sal_True;
956 [ # # ]: 0 : aProperties[ 1 ].Name = "FilterName";
957 [ # # ][ # # ]: 0 : aProperties[ 1 ].Value <<= rtl::OUString("impress8");
958 [ # # ][ # # ]: 0 : xStorable->storeToURL( aURL, aProperties );
959 : :
960 [ # # ]: 0 : mpDocSh->EnableSetModified( false );
961 : :
962 [ # # ]: 0 : return true;
963 [ # # ][ # # ]: 0 : }
964 : : }
965 [ # # ]: 0 : catch( Exception& )
966 : : {
967 : : }
968 : :
969 [ # # ]: 0 : mpDocSh->EnableSetModified( false );
970 : :
971 : 0 : return false;
972 : : }
973 : :
974 : : // =====================================================================
975 : : // Image-Dateien anlegen
976 : : // =====================================================================
977 : 0 : bool HtmlExport::CreateImagesForPresPages( bool bThumbnail)
978 : : {
979 : : try
980 : : {
981 [ # # ]: 0 : Reference < XMultiServiceFactory > xMSF( ::comphelper::getProcessServiceFactory() );
982 [ # # ]: 0 : if( !xMSF.is() )
983 : 0 : return false;
984 : :
985 [ # # ][ # # ]: 0 : Reference< XExporter > xGraphicExporter( xMSF->createInstance( "com.sun.star.drawing.GraphicExportFilter" ), UNO_QUERY );
[ # # ]
986 [ # # ]: 0 : Reference< XFilter > xFilter( xGraphicExporter, UNO_QUERY );
987 : :
988 : : DBG_ASSERT( xFilter.is(), "no com.sun.star.drawing.GraphicExportFilter?" );
989 [ # # ]: 0 : if( !xFilter.is() )
990 : 0 : return false;
991 : :
992 [ # # ][ # # ]: 0 : Sequence< PropertyValue > aFilterData(((meFormat==FORMAT_JPG)&&(mnCompression != -1))? 3 : 2);
[ # # ]
993 [ # # ]: 0 : aFilterData[0].Name = "PixelWidth";
994 [ # # ][ # # ]: 0 : aFilterData[0].Value <<= (sal_Int32)(bThumbnail ? PUB_THUMBNAIL_WIDTH : mnWidthPixel );
[ # # ]
995 [ # # ]: 0 : aFilterData[1].Name = "PixelHeight";
996 [ # # ][ # # ]: 0 : aFilterData[1].Value <<= (sal_Int32)(bThumbnail ? PUB_THUMBNAIL_HEIGHT : mnHeightPixel);
[ # # ]
997 [ # # ][ # # ]: 0 : if((meFormat==FORMAT_JPG)&&(mnCompression != -1))
998 : : {
999 [ # # ]: 0 : aFilterData[2].Name = "Quality";
1000 [ # # ][ # # ]: 0 : aFilterData[2].Value <<= (sal_Int32)mnCompression;
1001 : : }
1002 : :
1003 [ # # ]: 0 : Sequence< PropertyValue > aDescriptor( 3 );
1004 [ # # ]: 0 : aDescriptor[0].Name = "URL";
1005 [ # # ]: 0 : aDescriptor[1].Name = "FilterName";
1006 : 0 : OUString sFormat;
1007 [ # # ]: 0 : if( meFormat == FORMAT_PNG )
1008 : 0 : sFormat = "PNG";
1009 [ # # ]: 0 : else if( meFormat == FORMAT_GIF )
1010 : 0 : sFormat = "GIF";
1011 : : else
1012 : 0 : sFormat = "JPG";
1013 : :
1014 [ # # ][ # # ]: 0 : aDescriptor[1].Value <<= sFormat;
1015 [ # # ]: 0 : aDescriptor[2].Name = "FilterData";
1016 [ # # ][ # # ]: 0 : aDescriptor[2].Value <<= aFilterData;
1017 : :
1018 [ # # ]: 0 : for (sal_uInt16 nSdPage = 0; nSdPage < mnSdPageCount; nSdPage++)
1019 : : {
1020 : 0 : SdPage* pPage = maPages[ nSdPage ];
1021 : :
1022 [ # # ]: 0 : OUString aFull(maExportPath);
1023 [ # # ]: 0 : if (bThumbnail)
1024 [ # # ]: 0 : aFull += *mpThumbnailFiles[nSdPage];
1025 : : else
1026 [ # # ]: 0 : aFull += *mpImageFiles[nSdPage];
1027 : :
1028 : :
1029 [ # # ][ # # ]: 0 : aDescriptor[0].Value <<= aFull;
1030 : :
1031 [ # # ][ # # ]: 0 : Reference< XComponent > xPage( pPage->getUnoPage(), UNO_QUERY );
1032 [ # # ][ # # ]: 0 : xGraphicExporter->setSourceDocument( xPage );
1033 [ # # ][ # # ]: 0 : xFilter->filter( aDescriptor );
1034 : :
1035 [ # # ]: 0 : if (mpProgress)
1036 [ # # ]: 0 : mpProgress->SetState(++mnPagesWritten);
1037 [ # # ][ # # ]: 0 : }
[ # # ][ # # ]
[ # # # # ]
1038 : : }
1039 : 0 : catch( Exception& )
1040 : : {
1041 : 0 : return false;
1042 : : }
1043 : :
1044 : 0 : return true;
1045 : : }
1046 : :
1047 : : // =====================================================================
1048 : : // Ermittelt das SdrTextObject mit dem Layout Text dieser Seite
1049 : : // =====================================================================
1050 : 0 : SdrTextObj* HtmlExport::GetLayoutTextObject(SdrPage* pPage)
1051 : : {
1052 : 0 : sal_uLong nObjectCount = pPage->GetObjCount();
1053 : 0 : SdrObject* pObject = NULL;
1054 : 0 : SdrTextObj* pResult = NULL;
1055 : :
1056 [ # # ]: 0 : for (sal_uLong nObject = 0; nObject < nObjectCount; nObject++)
1057 : : {
1058 : 0 : pObject = pPage->GetObj(nObject);
1059 [ # # ]: 0 : if (pObject->GetObjInventor() == SdrInventor &&
[ # # # # ]
1060 : 0 : pObject->GetObjIdentifier() == OBJ_OUTLINETEXT)
1061 : : {
1062 : 0 : pResult = (SdrTextObj*)pObject;
1063 : 0 : break;
1064 : : }
1065 : : }
1066 : 0 : return pResult;
1067 : : }
1068 : :
1069 : : // =====================================================================
1070 : : // HTML-Text Versionen fuer Impress Seiten erzeugen
1071 : : // =====================================================================
1072 : :
1073 : 0 : String HtmlExport::WriteMetaCharset() const
1074 : : {
1075 : 0 : String aStr;
1076 [ # # ]: 0 : const sal_Char *pCharSet = rtl_getBestMimeCharsetFromTextEncoding( RTL_TEXTENCODING_UTF8 );
1077 [ # # ]: 0 : if ( pCharSet )
1078 : : {
1079 [ # # ]: 0 : aStr.AppendAscii( " <meta HTTP-EQUIV=CONTENT-TYPE CONTENT=\"text/html; charset=" );
1080 [ # # ]: 0 : aStr.AppendAscii( pCharSet );
1081 [ # # ]: 0 : aStr.AppendAscii( "\">\r\n" );
1082 : : }
1083 : 0 : return aStr;
1084 : : }
1085 : :
1086 : 0 : bool HtmlExport::CreateHtmlTextForPresPages()
1087 : : {
1088 : 0 : bool bOk = true;
1089 : :
1090 : 0 : SdrOutliner* pOutliner = mpDoc->GetInternalOutliner();
1091 : :
1092 [ # # ][ # # ]: 0 : for(sal_uInt16 nSdPage = 0; nSdPage < mnSdPageCount && bOk; nSdPage++)
[ # # ]
1093 : : {
1094 : 0 : SdPage* pPage = maPages[ nSdPage ];
1095 : :
1096 [ # # ]: 0 : if( mbDocColors )
1097 : : {
1098 [ # # ]: 0 : SetDocColors( pPage );
1099 : : }
1100 : :
1101 : : // HTML Kopf
1102 [ # # ]: 0 : String aStr(maHTMLHeader);
1103 [ # # ][ # # ]: 0 : aStr += WriteMetaCharset();
[ # # ]
1104 [ # # ]: 0 : aStr.AppendAscii( " <title>" );
1105 [ # # ][ # # ]: 0 : aStr += StringToHTMLString( *mpPageNames[nSdPage] );
[ # # ]
1106 [ # # ]: 0 : aStr.AppendAscii( "</title>\r\n" );
1107 [ # # ]: 0 : aStr.AppendAscii( "</head>\r\n" );
1108 [ # # ][ # # ]: 0 : aStr += CreateBodyTag();
[ # # ]
1109 : :
1110 : : // Navigationsleiste
1111 [ # # ][ # # ]: 0 : aStr += CreateNavBar(nSdPage, true);
[ # # ]
1112 : :
1113 : : // Seitentitel
1114 [ # # ][ # # ]: 0 : String sTitleText( CreateTextForTitle(pOutliner,pPage, pPage->GetPageBackgroundColor()) );
1115 [ # # ]: 0 : aStr.AppendAscii( "<h1 style=\"");
1116 [ # # ][ # # ]: 0 : aStr.Append( getParagraphStyle( pOutliner, 0 ) );
[ # # ]
1117 [ # # ]: 0 : aStr.AppendAscii( "\">" );
1118 [ # # ]: 0 : aStr += sTitleText;
1119 [ # # ]: 0 : aStr.AppendAscii( "</h1>\r\n" );
1120 : :
1121 : : // Gliederungstext schreiben
1122 [ # # ][ # # ]: 0 : aStr += CreateTextForPage( pOutliner, pPage, true, pPage->GetPageBackgroundColor() );
[ # # ][ # # ]
1123 : :
1124 : : // Notizen
1125 [ # # ]: 0 : if(mbNotes)
1126 : : {
1127 : 0 : SdPage* pNotesPage = maNotesPages[ nSdPage ];
1128 [ # # ]: 0 : String aNotesStr( CreateTextForNotesPage( pOutliner, pNotesPage, true, maBackColor) );
1129 : :
1130 [ # # ]: 0 : if( aNotesStr.Len() )
1131 : : {
1132 [ # # ]: 0 : aStr.AppendAscii( "<br>\r\n<h3>" );
1133 [ # # ][ # # ]: 0 : aStr += RESTOHTML(STR_HTMLEXP_NOTES);
[ # # ][ # # ]
[ # # ][ # # ]
1134 [ # # ]: 0 : aStr.AppendAscii( ":</h3>\r\n" );
1135 : :
1136 [ # # ]: 0 : aStr += aNotesStr;
1137 [ # # ]: 0 : }
1138 : : }
1139 : :
1140 : : // Seite beenden
1141 [ # # ]: 0 : aStr.AppendAscii( "</body>\r\n</html>" );
1142 : :
1143 [ # # ]: 0 : bOk = WriteHtml( *mpTextFiles[nSdPage], false, aStr );
1144 : :
1145 [ # # ]: 0 : if (mpProgress)
1146 [ # # ]: 0 : mpProgress->SetState(++mnPagesWritten);
1147 : :
1148 [ # # ][ # # ]: 0 : }
1149 : :
1150 : 0 : pOutliner->Clear();
1151 : :
1152 : 0 : return bOk;
1153 : : }
1154 : :
1155 : : /** exports the given html data into a non unicode file in the current export path with
1156 : : the given filename */
1157 : 0 : bool HtmlExport::WriteHtml( const String& rFileName, bool bAddExtension, const String& rHtmlData )
1158 : : {
1159 : 0 : sal_uLong nErr = 0;
1160 : :
1161 [ # # ]: 0 : String aFileName( rFileName );
1162 [ # # ]: 0 : if( bAddExtension )
1163 [ # # ]: 0 : aFileName += maHTMLExtension;
1164 : :
1165 [ # # ]: 0 : meEC.SetContext( STR_HTMLEXP_ERROR_CREATE_FILE, rFileName );
1166 : 0 : EasyFile aFile;
1167 : : SvStream* pStr;
1168 [ # # ]: 0 : String aFull( maExportPath );
1169 [ # # ]: 0 : aFull += aFileName;
1170 [ # # ]: 0 : nErr = aFile.createStream(aFull , pStr);
1171 [ # # ]: 0 : if(nErr == 0)
1172 : : {
1173 : : rtl::OString aStr(rtl::OUStringToOString(rHtmlData,
1174 [ # # ][ # # ]: 0 : RTL_TEXTENCODING_UTF8));
1175 [ # # ]: 0 : *pStr << aStr.getStr();
1176 [ # # ]: 0 : nErr = aFile.close();
1177 : : }
1178 : :
1179 [ # # ]: 0 : if( nErr != 0 )
1180 [ # # ]: 0 : ErrorHandler::HandleError(nErr);
1181 : :
1182 [ # # ][ # # ]: 0 : return nErr == 0;
[ # # ]
1183 : : }
1184 : :
1185 : : // =====================================================================
1186 : :
1187 : : /** Erzeugt den Outliner Text fuer das Titelobjekt einer Seite
1188 : : */
1189 : 0 : String HtmlExport::CreateTextForTitle( SdrOutliner* pOutliner, SdPage* pPage, const Color& rBackgroundColor )
1190 : : {
1191 : 0 : SdrTextObj* pTO = (SdrTextObj*)pPage->GetPresObj(PRESOBJ_TITLE);
1192 [ # # ]: 0 : if(!pTO)
1193 : 0 : pTO = GetLayoutTextObject(pPage);
1194 : :
1195 [ # # ][ # # ]: 0 : if (pTO && !pTO->IsEmptyPresObj())
[ # # ]
1196 : : {
1197 : 0 : OutlinerParaObject* pOPO = pTO->GetOutlinerParaObject();
1198 [ # # ][ # # ]: 0 : if(pOPO && pOutliner->GetParagraphCount() != 0)
[ # # ]
1199 : : {
1200 : 0 : pOutliner->Clear();
1201 : 0 : pOutliner->SetText(*pOPO);
1202 : 0 : return ParagraphToHTMLString(pOutliner,0, rBackgroundColor);
1203 : : }
1204 : : }
1205 : :
1206 : 0 : return String();
1207 : : }
1208 : :
1209 : : // =====================================================================
1210 : : // Erzeugt den Outliner Text fuer eine Seite
1211 : : // =====================================================================
1212 : 0 : String HtmlExport::CreateTextForPage( SdrOutliner* pOutliner,
1213 : : SdPage* pPage,
1214 : : bool bHeadLine, const Color& rBackgroundColor )
1215 : : {
1216 : 0 : String aStr;
1217 : :
1218 [ # # ]: 0 : SdrTextObj* pTO = (SdrTextObj*)pPage->GetPresObj(PRESOBJ_TEXT);
1219 [ # # ]: 0 : if(!pTO)
1220 [ # # ]: 0 : pTO = GetLayoutTextObject(pPage);
1221 : :
1222 [ # # ][ # # ]: 0 : if (pTO && !pTO->IsEmptyPresObj())
[ # # ][ # # ]
1223 : : {
1224 [ # # ]: 0 : OutlinerParaObject* pOPO = pTO->GetOutlinerParaObject();
1225 [ # # ]: 0 : if (pOPO)
1226 : : {
1227 [ # # ]: 0 : pOutliner->Clear();
1228 [ # # ]: 0 : pOutliner->SetText( *pOPO );
1229 : :
1230 [ # # ]: 0 : sal_uLong nCount = pOutliner->GetParagraphCount();
1231 : :
1232 : 0 : Paragraph* pPara = NULL;
1233 : 0 : sal_Int16 nActDepth = -1;
1234 : :
1235 [ # # ]: 0 : String aParaText;
1236 [ # # ]: 0 : for (sal_uLong nPara = 0; nPara < nCount; nPara++)
1237 : : {
1238 [ # # ]: 0 : pPara = pOutliner->GetParagraph(nPara);
1239 [ # # ]: 0 : if(pPara == 0)
1240 : 0 : continue;
1241 : :
1242 [ # # ]: 0 : const sal_Int16 nDepth = (sal_uInt16) pOutliner->GetDepth( (sal_uInt16) nPara );
1243 [ # # ][ # # ]: 0 : aParaText = ParagraphToHTMLString(pOutliner,nPara,rBackgroundColor);
[ # # ]
1244 : :
1245 [ # # ]: 0 : if(aParaText.Len() == 0)
1246 : 0 : continue;
1247 : :
1248 [ # # ]: 0 : if(nDepth < nActDepth )
1249 : : {
1250 [ # # ]: 0 : do
1251 : : {
1252 [ # # ]: 0 : aStr.AppendAscii( "</ul>" );
1253 : 0 : nActDepth--;
1254 : : }
1255 : : while(nDepth < nActDepth);
1256 : : }
1257 [ # # ]: 0 : else if(nDepth > nActDepth )
1258 : : {
1259 [ # # ]: 0 : do
1260 : : {
1261 [ # # ]: 0 : aStr.AppendAscii( "<ul>" );
1262 : 0 : nActDepth++;
1263 : : }
1264 : : while( nDepth > nActDepth );
1265 : : }
1266 : :
1267 [ # # ]: 0 : String sStyle( getParagraphStyle( pOutliner, nPara ) );
1268 [ # # ]: 0 : if(nActDepth >= 0 )
1269 : : {
1270 [ # # ]: 0 : aStr.AppendAscii( "<li style=\"");
1271 [ # # ]: 0 : aStr.Append( sStyle );
1272 [ # # ]: 0 : aStr.AppendAscii( "\">" );
1273 : : }
1274 : :
1275 [ # # ][ # # ]: 0 : if(nActDepth <= 0 && bHeadLine)
1276 : : {
1277 [ # # ]: 0 : if( nActDepth == 0 )
1278 : : {
1279 [ # # ]: 0 : aStr.AppendAscii( "<h2>" );
1280 : : }
1281 : : else
1282 : : {
1283 [ # # ]: 0 : aStr.AppendAscii( "<h2 style=\"");
1284 [ # # ]: 0 : aStr.Append( sStyle );
1285 [ # # ]: 0 : aStr.AppendAscii( "\">" );
1286 : : }
1287 : : }
1288 [ # # ]: 0 : aStr += aParaText;
1289 [ # # ][ # # ]: 0 : if(nActDepth == 0 && bHeadLine)
1290 [ # # ]: 0 : aStr.AppendAscii( "</h2>" );
1291 [ # # ]: 0 : if(nActDepth >= 0 )
1292 [ # # ]: 0 : aStr.AppendAscii( "</li>" );
1293 [ # # ]: 0 : aStr.AppendAscii( "\r\n" );
1294 [ # # ]: 0 : }
1295 : :
1296 [ # # ]: 0 : while( nActDepth >= 0 )
1297 : : {
1298 [ # # ]: 0 : aStr.AppendAscii( "</ul>" );
1299 : 0 : nActDepth--;
1300 [ # # ]: 0 : };
1301 : : }
1302 : : }
1303 : :
1304 : 0 : return aStr;
1305 : : }
1306 : :
1307 : : // =====================================================================
1308 : : // Erzeugt den Outliner Text fuer eine Notizseite
1309 : : // =====================================================================
1310 : 0 : String HtmlExport::CreateTextForNotesPage( SdrOutliner* pOutliner,
1311 : : SdPage* pPage,
1312 : : bool,
1313 : : const Color& rBackgroundColor )
1314 : : {
1315 : 0 : String aStr;
1316 : :
1317 [ # # ]: 0 : SdrTextObj* pTO = (SdrTextObj*)pPage->GetPresObj(PRESOBJ_NOTES);
1318 : :
1319 [ # # ][ # # ]: 0 : if (pTO && !pTO->IsEmptyPresObj())
[ # # ][ # # ]
1320 : : {
1321 [ # # ]: 0 : OutlinerParaObject* pOPO = pTO->GetOutlinerParaObject();
1322 [ # # ]: 0 : if (pOPO)
1323 : : {
1324 [ # # ]: 0 : pOutliner->Clear();
1325 [ # # ]: 0 : pOutliner->SetText( *pOPO );
1326 : :
1327 [ # # ]: 0 : sal_uLong nCount = pOutliner->GetParagraphCount();
1328 [ # # ]: 0 : for (sal_uLong nPara = 0; nPara < nCount; nPara++)
1329 : : {
1330 [ # # ]: 0 : aStr.AppendAscii("<p style=\"");
1331 [ # # ][ # # ]: 0 : aStr.Append( getParagraphStyle( pOutliner, nPara ) );
[ # # ]
1332 [ # # ]: 0 : aStr.AppendAscii("\">");
1333 [ # # ][ # # ]: 0 : aStr += ParagraphToHTMLString( pOutliner, nPara,rBackgroundColor );
[ # # ]
1334 [ # # ]: 0 : aStr.AppendAscii( "</p>\r\n" );
1335 : : }
1336 : : }
1337 : : }
1338 : :
1339 : 0 : return aStr;
1340 : : }
1341 : :
1342 : : // =====================================================================
1343 : : // Wandelt einen Paragraphen des Outliners in Html
1344 : : // =====================================================================
1345 : 0 : String HtmlExport::ParagraphToHTMLString( SdrOutliner* pOutliner, sal_uLong nPara, const Color& rBackgroundColor )
1346 : : {
1347 [ # # ]: 0 : String aStr;
1348 : :
1349 [ # # ]: 0 : if(NULL == pOutliner)
1350 : : return aStr;
1351 : :
1352 : : // TODO: MALTE!!!
1353 : 0 : EditEngine& rEditEngine = *(EditEngine*)&pOutliner->GetEditEngine();
1354 [ # # ]: 0 : bool bOldUpdateMode = rEditEngine.GetUpdateMode();
1355 [ # # ]: 0 : rEditEngine.SetUpdateMode(sal_True);
1356 : :
1357 [ # # ]: 0 : Paragraph* pPara = pOutliner->GetParagraph(nPara);
1358 [ # # ]: 0 : if(NULL == pPara)
1359 : : return aStr;
1360 : :
1361 [ # # ][ # # ]: 0 : HtmlState aState( (mbUserAttr || mbDocColors) ? maTextColor : Color(COL_BLACK) );
[ # # ][ # # ]
[ # # ]
1362 [ # # ]: 0 : std::vector<sal_uInt16> aPortionList;
1363 [ # # ]: 0 : rEditEngine.GetPortions( (sal_uInt16) nPara, aPortionList );
1364 : :
1365 : 0 : sal_uInt16 nPos1 = 0;
1366 [ # # ][ # # ]: 0 : for( std::vector<sal_uInt16>::const_iterator it( aPortionList.begin() ); it != aPortionList.end(); ++it )
[ # # ][ # # ]
1367 : : {
1368 [ # # ]: 0 : sal_uInt16 nPos2 = *it;
1369 : :
1370 : 0 : ESelection aSelection( (sal_uInt16) nPara, nPos1, (sal_uInt16) nPara, nPos2);
1371 : :
1372 [ # # ]: 0 : SfxItemSet aSet( rEditEngine.GetAttribs( aSelection ) );
1373 : :
1374 [ # # ][ # # ]: 0 : String aPortion(StringToHTMLString(rEditEngine.GetText( aSelection )));
[ # # ]
1375 : :
1376 [ # # ][ # # ]: 0 : aStr += TextAttribToHTMLString( &aSet, &aState, rBackgroundColor );
[ # # ]
1377 [ # # ]: 0 : aStr += aPortion;
1378 : :
1379 : 0 : nPos1 = nPos2;
1380 [ # # ][ # # ]: 0 : }
1381 [ # # ][ # # ]: 0 : aStr += aState.Flush();
[ # # ]
1382 [ # # ]: 0 : rEditEngine.SetUpdateMode(bOldUpdateMode);
1383 : :
1384 [ # # ]: 0 : return aStr;
1385 : : }
1386 : :
1387 : : // =====================================================================
1388 : : // Erzeugt anhand der Attribute im angegebennen Set und dem gegebennen
1389 : : // HtmlState die noetigen Html-Tags um die Attribute zu uebernehmen
1390 : : // =====================================================================
1391 : 0 : String HtmlExport::TextAttribToHTMLString( SfxItemSet* pSet, HtmlState* pState, const Color& rBackgroundColor )
1392 : : {
1393 [ # # ]: 0 : String aStr;
1394 : :
1395 [ # # ]: 0 : if(NULL == pSet)
1396 : : return aStr;
1397 : :
1398 [ # # ][ # # ]: 0 : String aLink, aTarget;
1399 [ # # ][ # # ]: 0 : if ( pSet->GetItemState( EE_FEATURE_FIELD ) == SFX_ITEM_ON )
1400 : : {
1401 [ # # ]: 0 : SvxFieldItem* pItem = (SvxFieldItem*)pSet->GetItem( EE_FEATURE_FIELD );
1402 [ # # ]: 0 : if(pItem)
1403 : : {
1404 [ # # ][ # # ]: 0 : SvxURLField* pURL = PTR_CAST(SvxURLField, pItem->GetField());
[ # # ][ # # ]
1405 [ # # ]: 0 : if(pURL)
1406 : : {
1407 [ # # ]: 0 : aLink = pURL->GetURL();
1408 [ # # ]: 0 : aTarget = pURL->GetTargetFrame();
1409 : : }
1410 : : }
1411 : : }
1412 : :
1413 : : bool bTemp;
1414 [ # # ]: 0 : String aTemp;
1415 : :
1416 [ # # ][ # # ]: 0 : if ( pSet->GetItemState( EE_CHAR_WEIGHT ) == SFX_ITEM_ON )
1417 : : {
1418 [ # # ]: 0 : bTemp = ((const SvxWeightItem&)pSet->Get( EE_CHAR_WEIGHT )).GetWeight() == WEIGHT_BOLD;
1419 [ # # ][ # # ]: 0 : aTemp = pState->SetWeight( bTemp );
[ # # ]
1420 [ # # ]: 0 : if( bTemp )
1421 [ # # ]: 0 : aStr.Insert( aTemp, 0 );
1422 : : else
1423 [ # # ]: 0 : aStr += aTemp;
1424 : : }
1425 : :
1426 [ # # ][ # # ]: 0 : if ( pSet->GetItemState( EE_CHAR_UNDERLINE ) == SFX_ITEM_ON )
1427 : : {
1428 [ # # ]: 0 : bTemp = ((const SvxUnderlineItem&)pSet->Get( EE_CHAR_UNDERLINE )).GetLineStyle() != UNDERLINE_NONE;
1429 [ # # ][ # # ]: 0 : aTemp = pState->SetUnderline( bTemp );
[ # # ]
1430 [ # # ]: 0 : if( bTemp )
1431 [ # # ]: 0 : aStr.Insert( aTemp, 0 );
1432 : : else
1433 [ # # ]: 0 : aStr += aTemp;
1434 : : }
1435 : :
1436 [ # # ][ # # ]: 0 : if ( pSet->GetItemState( EE_CHAR_STRIKEOUT ) == SFX_ITEM_ON )
1437 : : {
1438 [ # # ]: 0 : bTemp = ((const SvxCrossedOutItem&)pSet->Get( EE_CHAR_STRIKEOUT )).GetStrikeout() != STRIKEOUT_NONE;
1439 [ # # ][ # # ]: 0 : aTemp = pState->SetStrikeout( bTemp );
[ # # ]
1440 [ # # ]: 0 : if( bTemp )
1441 [ # # ]: 0 : aStr.Insert( aTemp, 0 );
1442 : : else
1443 [ # # ]: 0 : aStr += aTemp;
1444 : : }
1445 : :
1446 [ # # ][ # # ]: 0 : if ( pSet->GetItemState( EE_CHAR_ITALIC ) == SFX_ITEM_ON )
1447 : : {
1448 [ # # ]: 0 : bTemp = ((const SvxPostureItem&)pSet->Get( EE_CHAR_ITALIC )).GetPosture() != ITALIC_NONE;
1449 [ # # ][ # # ]: 0 : aTemp = pState->SetItalic( bTemp );
[ # # ]
1450 [ # # ]: 0 : if( bTemp )
1451 [ # # ]: 0 : aStr.Insert( aTemp, 0 );
1452 : : else
1453 [ # # ]: 0 : aStr += aTemp;
1454 : : }
1455 : :
1456 [ # # ]: 0 : if(mbDocColors)
1457 : : {
1458 [ # # ][ # # ]: 0 : if ( pSet->GetItemState( EE_CHAR_COLOR ) == SFX_ITEM_ON )
1459 : : {
1460 [ # # ]: 0 : Color aTextColor = ((const SvxColorItem&) pSet->Get( EE_CHAR_COLOR )).GetValue();
1461 [ # # ]: 0 : if( aTextColor == COL_AUTO )
1462 : : {
1463 [ # # ][ # # ]: 0 : if( !rBackgroundColor.IsDark() )
1464 : 0 : aTextColor = COL_BLACK;
1465 : : }
1466 [ # # ][ # # ]: 0 : aStr += pState->SetColor( aTextColor );
[ # # ]
1467 : : }
1468 : : }
1469 : :
1470 [ # # ]: 0 : if( aLink.Len() )
1471 [ # # ][ # # ]: 0 : aStr.Insert( pState->SetLink(aLink, aTarget), 0 );
[ # # ]
1472 : : else
1473 [ # # ][ # # ]: 0 : aStr += pState->SetLink(aLink, aTarget);
[ # # ]
1474 : :
1475 [ # # ][ # # ]: 0 : return aStr;
[ # # ]
1476 : : }
1477 : :
1478 : : // =====================================================================
1479 : : // HTML-Wrapper fuer Bild-Dateien erzeugen
1480 : : // =====================================================================
1481 : 0 : bool HtmlExport::CreateHtmlForPresPages()
1482 : : {
1483 : 0 : bool bOk = true;
1484 : :
1485 [ # # ]: 0 : std::vector<SdrObject*> aClickableObjects;
1486 : :
1487 [ # # ][ # # ]: 0 : for(sal_uInt16 nSdPage = 0; nSdPage < mnSdPageCount && bOk; nSdPage++)
[ # # ]
1488 : : {
1489 : : // Klickbare Objekte finden (auch auf der Masterpage) und
1490 : : // in Liste stellen. In umgekehrter Zeichenreihenfolge in
1491 : : // die Liste stellen, da in HTML bei Ueberlappungen die
1492 : : // _erstgenannte_ Area wirkt.
1493 : :
1494 : 0 : SdPage* pPage = maPages[ nSdPage ];
1495 : :
1496 [ # # ]: 0 : if( mbDocColors )
1497 : : {
1498 [ # # ]: 0 : SetDocColors( pPage );
1499 : : }
1500 : :
1501 : 0 : bool bMasterDone = false;
1502 : :
1503 [ # # ]: 0 : while (!bMasterDone)
1504 : : {
1505 : : // sal_True = rueckwaerts
1506 [ # # ]: 0 : SdrObjListIter aIter(*pPage, IM_DEEPWITHGROUPS, sal_True);
1507 : :
1508 [ # # ]: 0 : SdrObject* pObject = aIter.Next();
1509 [ # # ]: 0 : while (pObject)
1510 : : {
1511 [ # # ]: 0 : SdAnimationInfo* pInfo = mpDoc->GetAnimationInfo(pObject);
1512 [ # # ]: 0 : SdIMapInfo* pIMapInfo = mpDoc->GetIMapInfo(pObject);
1513 : :
1514 [ # # ][ # # ]: 0 : if ((pInfo &&
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
1515 : : (pInfo->meClickAction == presentation::ClickAction_BOOKMARK ||
1516 : : pInfo->meClickAction == presentation::ClickAction_DOCUMENT ||
1517 : : pInfo->meClickAction == presentation::ClickAction_PREVPAGE ||
1518 : : pInfo->meClickAction == presentation::ClickAction_NEXTPAGE ||
1519 : : pInfo->meClickAction == presentation::ClickAction_FIRSTPAGE ||
1520 : : pInfo->meClickAction == presentation::ClickAction_LASTPAGE)) ||
1521 : : pIMapInfo)
1522 : : {
1523 [ # # ]: 0 : aClickableObjects.push_back(pObject);
1524 : : }
1525 : :
1526 [ # # ]: 0 : pObject = aIter.Next();
1527 : : }
1528 : : // jetzt zur Masterpage oder beenden
1529 [ # # ]: 0 : if (!pPage->IsMasterPage())
1530 [ # # ]: 0 : pPage = (SdPage*)(&(pPage->TRG_GetMasterPage()));
1531 : : else
1532 : 0 : bMasterDone = true;
1533 : 0 : }
1534 : :
1535 : : // HTML Head
1536 [ # # ]: 0 : String aStr(maHTMLHeader);
1537 [ # # ][ # # ]: 0 : aStr += WriteMetaCharset();
[ # # ]
1538 [ # # ]: 0 : aStr.AppendAscii( " <title>" );
1539 [ # # ][ # # ]: 0 : aStr += StringToHTMLString(*mpPageNames[nSdPage]);
[ # # ]
1540 [ # # ]: 0 : aStr.AppendAscii( "</title>\r\n" );
1541 : :
1542 : : // insert timing information
1543 : 0 : pPage = maPages[ nSdPage ];
1544 [ # # ]: 0 : if( meMode == PUBLISH_KIOSK )
1545 : : {
1546 : 0 : sal_uLong nSecs = 0;
1547 : 0 : bool bEndless = false;
1548 [ # # ]: 0 : if( !mbAutoSlide )
1549 : : {
1550 [ # # ]: 0 : if( pPage->GetPresChange() != PRESCHANGE_MANUAL )
1551 : : {
1552 : 0 : nSecs = pPage->GetTime();
1553 : 0 : bEndless = mpDoc->getPresentationSettings().mbEndless;
1554 : : }
1555 : : }
1556 : : else
1557 : : {
1558 : 0 : nSecs = mnSlideDuration;
1559 : 0 : bEndless = mbEndless;
1560 : : }
1561 : :
1562 [ # # ]: 0 : if( nSecs != 0 )
1563 : : {
1564 [ # # ][ # # ]: 0 : if( nSdPage < (mnSdPageCount-1) || bEndless )
1565 : : {
1566 [ # # ]: 0 : aStr.AppendAscii( "<meta http-equiv=\"refresh\" content=\"" );
1567 [ # # ][ # # ]: 0 : aStr += String::CreateFromInt32(nSecs);
[ # # ]
1568 [ # # ]: 0 : aStr.AppendAscii( "; URL=" );
1569 : :
1570 : 0 : int nPage = nSdPage + 1;
1571 [ # # ]: 0 : if( nPage == mnSdPageCount )
1572 : 0 : nPage = 0;
1573 : :
1574 [ # # ][ # # ]: 0 : aStr += StringToURL(*mpHTMLFiles[nPage]);
[ # # ]
1575 : :
1576 [ # # ]: 0 : aStr.AppendAscii( "\">\r\n" );
1577 : : }
1578 : : }
1579 : : }
1580 : :
1581 [ # # ]: 0 : aStr.AppendAscii( "</head>\r\n" );
1582 : :
1583 : : // HTML Body
1584 [ # # ][ # # ]: 0 : aStr += CreateBodyTag();
[ # # ]
1585 : :
1586 [ # # ][ # # ]: 0 : if( mbSlideSound && pPage->IsSoundOn() )
[ # # ]
1587 [ # # ][ # # ]: 0 : aStr += InsertSound( pPage->GetSoundFile() );
[ # # ][ # # ]
[ # # ]
1588 : :
1589 : : // Navigationsleiste
1590 [ # # ]: 0 : if(!mbFrames )
1591 [ # # ][ # # ]: 0 : aStr += CreateNavBar( nSdPage, false );
[ # # ]
1592 : : // Image
1593 [ # # ]: 0 : aStr.AppendAscii( "<center>" );
1594 [ # # ]: 0 : aStr.AppendAscii( "<img src=\"" );
1595 [ # # ][ # # ]: 0 : aStr += StringToURL( *mpImageFiles[nSdPage] );
[ # # ]
1596 [ # # ]: 0 : aStr.AppendAscii( "\" alt=\"\"" );
1597 : :
1598 [ # # ]: 0 : if (!aClickableObjects.empty())
1599 [ # # ]: 0 : aStr.AppendAscii( " USEMAP=\"#map0\"" );
1600 : :
1601 [ # # ]: 0 : aStr.AppendAscii( "></center>\r\n" );
1602 : :
1603 : : // Notizen
1604 [ # # ][ # # ]: 0 : if(mbNotes && !mbFrames)
1605 : : {
1606 [ # # ]: 0 : SdrOutliner* pOutliner = mpDoc->GetInternalOutliner();
1607 : 0 : SdPage* pNotesPage = maNotesPages[ nSdPage ];
1608 [ # # ]: 0 : String aNotesStr( CreateTextForNotesPage( pOutliner, pNotesPage, true, maBackColor) );
1609 [ # # ]: 0 : pOutliner->Clear();
1610 : :
1611 [ # # ]: 0 : if( aNotesStr.Len() )
1612 : : {
1613 [ # # ]: 0 : aStr.AppendAscii( "<h3>" );
1614 [ # # ][ # # ]: 0 : aStr += RESTOHTML(STR_HTMLEXP_NOTES);
[ # # ][ # # ]
[ # # ][ # # ]
1615 [ # # ]: 0 : aStr.AppendAscii( ":</h3><br>\r\n\r\n<p>" );
1616 : :
1617 [ # # ]: 0 : aStr += aNotesStr;
1618 [ # # ]: 0 : aStr.AppendAscii( "\r\n</p>\r\n" );
1619 [ # # ]: 0 : }
1620 : : }
1621 : :
1622 : : // ggfs. Imagemap erzeugen
1623 [ # # ]: 0 : if (!aClickableObjects.empty())
1624 : : {
1625 [ # # ]: 0 : aStr.AppendAscii( "<map name=\"map0\">\r\n" );
1626 : :
1627 [ # # ]: 0 : for (sal_uInt32 nObject = 0, n = aClickableObjects.size(); nObject < n; nObject++)
1628 : : {
1629 [ # # ]: 0 : SdrObject* pObject = aClickableObjects[nObject];
1630 [ # # ]: 0 : SdAnimationInfo* pInfo = mpDoc->GetAnimationInfo(pObject);
1631 [ # # ]: 0 : SdIMapInfo* pIMapInfo = mpDoc->GetIMapInfo(pObject);
1632 : :
1633 [ # # ]: 0 : Rectangle aRect(pObject->GetCurrentBoundRect());
1634 : 0 : Point aLogPos(aRect.TopLeft());
1635 [ # # ][ # # ]: 0 : bool bIsSquare = aRect.GetWidth() == aRect.GetHeight();
1636 : :
1637 [ # # ][ # # ]: 0 : sal_uLong nPageWidth = pPage->GetSize().Width() - pPage->GetLftBorder() -
1638 [ # # ]: 0 : pPage->GetRgtBorder();
1639 : :
1640 : : // das BoundRect bezieht sich auf den physikalischen
1641 : : // Seitenursprung, nicht auf den Koordinatenursprung
1642 [ # # ][ # # ]: 0 : aRect.Move(-pPage->GetLftBorder(), -pPage->GetUppBorder());
[ # # ]
1643 : :
1644 : 0 : double fLogicToPixel = ((double)mnWidthPixel) / nPageWidth;
1645 : 0 : aRect.Left() = (long)(aRect.Left() * fLogicToPixel);
1646 : 0 : aRect.Top() = (long)(aRect.Top() * fLogicToPixel);
1647 : 0 : aRect.Right() = (long)(aRect.Right() * fLogicToPixel);
1648 : 0 : aRect.Bottom() = (long)(aRect.Bottom() * fLogicToPixel);
1649 [ # # ]: 0 : long nRadius = aRect.GetWidth() / 2;
1650 : :
1651 : :
1652 : : /*************************************************************
1653 : : |* wenn das Objekt eine eigene Imagemap enthaelt, werden ihre
1654 : : |* Areas in diese Imagemap eingefuegt
1655 : : \************************************************************/
1656 [ # # ]: 0 : if (pIMapInfo)
1657 : : {
1658 : 0 : const ImageMap& rIMap = pIMapInfo->GetImageMap();
1659 : 0 : sal_uInt16 nAreaCount = rIMap.GetIMapObjectCount();
1660 [ # # ]: 0 : for (sal_uInt16 nArea = 0; nArea < nAreaCount; nArea++)
1661 : : {
1662 [ # # ]: 0 : IMapObject* pArea = rIMap.GetIMapObject(nArea);
1663 [ # # ]: 0 : sal_uInt16 nType = pArea->GetType();
1664 [ # # ]: 0 : String aURL( pArea->GetURL() );
1665 : :
1666 : : // ggfs. Seiten- oder Objektnamen umwandeln in den
1667 : : // Namen der entsprechenden HTML-Datei
1668 : : sal_Bool bIsMasterPage;
1669 [ # # ]: 0 : sal_uInt16 nPgNum = mpDoc->GetPageByName( aURL, bIsMasterPage );
1670 : 0 : SdrObject* pObj = NULL;
1671 : :
1672 [ # # ]: 0 : if (nPgNum == SDRPAGE_NOTFOUND)
1673 : : {
1674 : : // Ist das Bookmark ein Objekt?
1675 [ # # ]: 0 : pObj = mpDoc->GetObj( aURL );
1676 [ # # ]: 0 : if (pObj)
1677 [ # # ][ # # ]: 0 : nPgNum = pObj->GetPage()->GetPageNum();
1678 : : }
1679 [ # # ]: 0 : if (nPgNum != SDRPAGE_NOTFOUND)
1680 : : {
1681 : 0 : nPgNum = (nPgNum - 1) / 2; // SdrPageNum --> SdPageNum
1682 [ # # ][ # # ]: 0 : aURL = CreatePageURL(nPgNum);
[ # # ]
1683 : : }
1684 : :
1685 [ # # # # ]: 0 : switch(nType)
1686 : : {
1687 : : case IMAP_OBJ_RECTANGLE:
1688 : : {
1689 : : Rectangle aArea(((IMapRectangleObject*)pArea)->
1690 [ # # ]: 0 : GetRectangle(false));
1691 : :
1692 : : // Umrechnung in Pixelkoordinaten
1693 [ # # ]: 0 : aArea.Move(aLogPos.X() - pPage->GetLftBorder(),
1694 [ # # ][ # # ]: 0 : aLogPos.Y() - pPage->GetUppBorder());
1695 : 0 : aArea.Left() = (long)(aArea.Left() * fLogicToPixel);
1696 : 0 : aArea.Top() = (long)(aArea.Top() * fLogicToPixel);
1697 : 0 : aArea.Right() = (long)(aArea.Right() * fLogicToPixel);
1698 : 0 : aArea.Bottom() = (long)(aArea.Bottom() * fLogicToPixel);
1699 : :
1700 [ # # ][ # # ]: 0 : aStr += CreateHTMLRectArea(aArea, aURL);
[ # # ]
1701 : : }
1702 : 0 : break;
1703 : :
1704 : : case IMAP_OBJ_CIRCLE:
1705 : : {
1706 : : Point aCenter(((IMapCircleObject*)pArea)->
1707 [ # # ]: 0 : GetCenter(false));
1708 [ # # ]: 0 : aCenter += Point(aLogPos.X() - pPage->GetLftBorder(),
1709 [ # # ]: 0 : aLogPos.Y() - pPage->GetUppBorder());
1710 : 0 : aCenter.X() = (long)(aCenter.X() * fLogicToPixel);
1711 : 0 : aCenter.Y() = (long)(aCenter.Y() * fLogicToPixel);
1712 : :
1713 : : sal_uLong nCircleRadius = (((IMapCircleObject*)pArea)->
1714 [ # # ]: 0 : GetRadius(false));
1715 : 0 : nCircleRadius = (sal_uLong)(nCircleRadius * fLogicToPixel);
1716 : : aStr += CreateHTMLCircleArea(nCircleRadius,
1717 : 0 : aCenter.X(), aCenter.Y(),
1718 [ # # ][ # # ]: 0 : aURL);
[ # # ]
1719 : : }
1720 : 0 : break;
1721 : :
1722 : : case IMAP_OBJ_POLYGON:
1723 : : {
1724 [ # # ]: 0 : Polygon aArea(((IMapPolygonObject*)pArea)->GetPolygon(false));
1725 [ # # ][ # # ]: 0 : aStr += CreateHTMLPolygonArea(::basegfx::B2DPolyPolygon(aArea.getB2DPolygon()), Size(aLogPos.X() - pPage->GetLftBorder(), aLogPos.Y() - pPage->GetUppBorder()), fLogicToPixel, aURL);
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
1726 : : }
1727 : 0 : break;
1728 : :
1729 : : default:
1730 : : {
1731 : : DBG_WARNING("unbekannter IMAP_OBJ_Typ");
1732 : : }
1733 : 0 : break;
1734 : : }
1735 [ # # ]: 0 : }
1736 : : }
1737 : :
1738 : :
1739 : :
1740 : : /*************************************************************
1741 : : |* wenn es eine presentation::ClickAction gibt, Bookmark bestimmen und eine
1742 : : |* Area fuer das ganze Objekt erzeugen
1743 : : \************************************************************/
1744 [ # # ]: 0 : if( pInfo )
1745 : : {
1746 [ # # ]: 0 : String aHRef;
1747 : 0 : presentation::ClickAction eClickAction = pInfo->meClickAction;
1748 : :
1749 [ # # # # : 0 : switch( eClickAction )
# # # ]
1750 : : {
1751 : : case presentation::ClickAction_BOOKMARK:
1752 : : {
1753 : : sal_Bool bIsMasterPage;
1754 [ # # ][ # # ]: 0 : sal_uInt16 nPgNum = mpDoc->GetPageByName( pInfo->GetBookmark(), bIsMasterPage );
[ # # ]
1755 : 0 : SdrObject* pObj = NULL;
1756 : :
1757 [ # # ]: 0 : if( nPgNum == SDRPAGE_NOTFOUND )
1758 : : {
1759 : : // Ist das Bookmark ein Objekt?
1760 [ # # ][ # # ]: 0 : pObj = mpDoc->GetObj(pInfo->GetBookmark());
[ # # ]
1761 [ # # ]: 0 : if (pObj)
1762 [ # # ][ # # ]: 0 : nPgNum = pObj->GetPage()->GetPageNum();
1763 : : }
1764 : :
1765 [ # # ]: 0 : if( SDRPAGE_NOTFOUND != nPgNum )
1766 [ # # ][ # # ]: 0 : aHRef = CreatePageURL(( nPgNum - 1 ) / 2 );
[ # # ]
1767 : : }
1768 : 0 : break;
1769 : :
1770 : : case presentation::ClickAction_DOCUMENT:
1771 [ # # ][ # # ]: 0 : aHRef = pInfo->GetBookmark();
[ # # ]
1772 : 0 : break;
1773 : :
1774 : : case presentation::ClickAction_PREVPAGE:
1775 : : {
1776 : 0 : sal_uLong nPage = nSdPage;
1777 [ # # ]: 0 : if (nSdPage == 0)
1778 : 0 : nPage = 0;
1779 : : else
1780 : 0 : nPage = nSdPage - 1;
1781 : :
1782 [ # # ][ # # ]: 0 : aHRef = CreatePageURL( (sal_uInt16) nPage);
[ # # ]
1783 : : }
1784 : 0 : break;
1785 : :
1786 : : case presentation::ClickAction_NEXTPAGE:
1787 : : {
1788 : 0 : sal_uLong nPage = nSdPage;
1789 [ # # ]: 0 : if (nSdPage == mnSdPageCount - 1)
1790 : 0 : nPage = mnSdPageCount - 1;
1791 : : else
1792 : 0 : nPage = nSdPage + 1;
1793 : :
1794 [ # # ][ # # ]: 0 : aHRef = CreatePageURL( (sal_uInt16) nPage);
[ # # ]
1795 : : }
1796 : 0 : break;
1797 : :
1798 : : case presentation::ClickAction_FIRSTPAGE:
1799 [ # # ][ # # ]: 0 : aHRef = CreatePageURL(0);
[ # # ]
1800 : 0 : break;
1801 : :
1802 : : case presentation::ClickAction_LASTPAGE:
1803 [ # # ][ # # ]: 0 : aHRef = CreatePageURL(mnSdPageCount - 1);
[ # # ]
1804 : 0 : break;
1805 : :
1806 : : default:
1807 : 0 : break;
1808 : : }
1809 : :
1810 : : // jetzt die Areas
1811 [ # # ]: 0 : if( aHRef.Len() )
1812 : : {
1813 : : // ein Kreis?
1814 [ # # ][ # # ]: 0 : if (pObject->GetObjInventor() == SdrInventor &&
[ # # ][ # # ]
[ # # ]
1815 [ # # ]: 0 : pObject->GetObjIdentifier() == OBJ_CIRC &&
1816 : : bIsSquare )
1817 : : {
1818 [ # # ]: 0 : aStr += CreateHTMLCircleArea(aRect.GetWidth() / 2,
1819 : 0 : aRect.Left() + nRadius,
1820 : 0 : aRect.Top() + nRadius,
1821 [ # # ][ # # ]: 0 : aHRef);
[ # # ]
1822 : : }
1823 : : // ein Polygon?
1824 [ # # ][ # # ]: 0 : else if (pObject->GetObjInventor() == SdrInventor &&
[ # # ][ # # ]
[ # # ][ # # ]
1825 [ # # ]: 0 : (pObject->GetObjIdentifier() == OBJ_PATHLINE ||
1826 [ # # ]: 0 : pObject->GetObjIdentifier() == OBJ_PLIN ||
1827 [ # # ]: 0 : pObject->GetObjIdentifier() == OBJ_POLY))
1828 : : {
1829 [ # # ][ # # ]: 0 : aStr += CreateHTMLPolygonArea(((SdrPathObj*)pObject)->GetPathPoly(), Size(-pPage->GetLftBorder(), -pPage->GetUppBorder()), fLogicToPixel, aHRef);
[ # # ][ # # ]
[ # # ]
1830 : : }
1831 : : // was anderes: das BoundRect nehmen
1832 : : else
1833 : : {
1834 [ # # ][ # # ]: 0 : aStr += CreateHTMLRectArea(aRect, aHRef);
[ # # ]
1835 : : }
1836 : :
1837 [ # # ]: 0 : }
1838 : : }
1839 : : }
1840 : :
1841 [ # # ]: 0 : aStr.AppendAscii( "</map>\r\n" );
1842 : : }
1843 : 0 : aClickableObjects.clear();
1844 : :
1845 [ # # ]: 0 : aStr.AppendAscii( "</body>\r\n</html>" );
1846 : :
1847 [ # # ]: 0 : bOk = WriteHtml( *mpHTMLFiles[nSdPage], false, aStr );
1848 : :
1849 [ # # ]: 0 : if (mpProgress)
1850 [ # # ]: 0 : mpProgress->SetState(++mnPagesWritten);
1851 [ # # ]: 0 : }
1852 : :
1853 : 0 : return bOk;
1854 : : }
1855 : :
1856 : : // =====================================================================
1857 : : // Uebersichtsseite erzeugen
1858 : : // =====================================================================
1859 : 0 : bool HtmlExport::CreateContentPage()
1860 : : {
1861 : : // Parameter
1862 [ # # ]: 0 : String aEmpty;
1863 : :
1864 [ # # ]: 0 : if( mbDocColors )
1865 [ # # ]: 0 : SetDocColors();
1866 : :
1867 : : // Html Kopf
1868 [ # # ]: 0 : String aStr(maHTMLHeader);
1869 [ # # ][ # # ]: 0 : aStr += WriteMetaCharset();
[ # # ]
1870 [ # # ]: 0 : aStr.AppendAscii( " <title>" );
1871 [ # # ][ # # ]: 0 : aStr += StringToHTMLString(*mpPageNames[0]);
[ # # ]
1872 [ # # ]: 0 : aStr.AppendAscii( "</title>\r\n</head>\r\n" );
1873 [ # # ][ # # ]: 0 : aStr += CreateBodyTag();
[ # # ]
1874 : :
1875 : : // Seitenkopf
1876 [ # # ]: 0 : aStr.AppendAscii( "<center>\r\n" );
1877 : :
1878 [ # # ]: 0 : if(mbHeader)
1879 : : {
1880 [ # # ]: 0 : aStr.AppendAscii( "<h1>" );
1881 [ # # ][ # # ]: 0 : aStr += getDocumentTitle();
[ # # ]
1882 [ # # ]: 0 : aStr.AppendAscii( "</h1><br>\r\n" );
1883 : : }
1884 : :
1885 [ # # ]: 0 : aStr.AppendAscii( "<h2>" );
1886 : :
1887 : : // Solaris compiler bug workaround
1888 [ # # ]: 0 : if( mbFrames )
1889 : : aStr += CreateLink( maFramePage,
1890 [ # # ][ # # ]: 0 : RESTOHTML(STR_HTMLEXP_CLICKSTART) );
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
1891 : : else
1892 : 0 : aStr += CreateLink( StringToHTMLString(*mpHTMLFiles[0]),
1893 [ # # ][ # # ]: 0 : RESTOHTML(STR_HTMLEXP_CLICKSTART) );
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
1894 : :
1895 [ # # ]: 0 : aStr.AppendAscii( "</h2>\r\n</center>\r\n" );
1896 : :
1897 [ # # ]: 0 : aStr.AppendAscii( "<center><table width=\"90%\"><tr>\r\n" );
1898 : :
1899 : : // Inhaltsverzeichnis
1900 [ # # ]: 0 : aStr.AppendAscii( "<td valign=\"top\" align=\"left\" width=\"25%\">\r\n" );
1901 [ # # ]: 0 : aStr.AppendAscii( "<h3>" );
1902 [ # # ][ # # ]: 0 : aStr += RESTOHTML(STR_HTMLEXP_CONTENTS);
[ # # ][ # # ]
[ # # ][ # # ]
1903 [ # # ]: 0 : aStr.AppendAscii( "</h3>" );
1904 : :
1905 [ # # ]: 0 : for(sal_uInt16 nSdPage = 0; nSdPage < mnSdPageCount; nSdPage++)
1906 : : {
1907 [ # # ]: 0 : String aPageName = *mpPageNames[nSdPage];
1908 [ # # ]: 0 : aStr.AppendAscii( "<div align=\"left\">" );
1909 [ # # ]: 0 : if(mbFrames)
1910 [ # # ][ # # ]: 0 : aStr += StringToHTMLString(aPageName);
[ # # ]
1911 : : else
1912 [ # # ][ # # ]: 0 : aStr += CreateLink(*mpHTMLFiles[nSdPage], aPageName);
[ # # ][ # # ]
[ # # ]
1913 [ # # ]: 0 : aStr.AppendAscii( "</div>\r\n" );
1914 [ # # ]: 0 : }
1915 [ # # ]: 0 : aStr.AppendAscii( "</td>\r\n" );
1916 : :
1917 : : // Dokument Infos
1918 [ # # ]: 0 : aStr.AppendAscii( "<td valign=\"top\" align=\"left\" width=\"75%\">\r\n" );
1919 : :
1920 [ # # ]: 0 : if(maAuthor.Len())
1921 : : {
1922 [ # # ]: 0 : aStr.AppendAscii( "<p><strong>" );
1923 [ # # ][ # # ]: 0 : aStr += RESTOHTML(STR_HTMLEXP_AUTHOR);
[ # # ][ # # ]
[ # # ][ # # ]
1924 [ # # ]: 0 : aStr.AppendAscii( ":</strong> " );
1925 [ # # ][ # # ]: 0 : aStr += StringToHTMLString(maAuthor);
[ # # ]
1926 [ # # ]: 0 : aStr.AppendAscii( "</p>\r\n" );
1927 : : }
1928 : :
1929 [ # # ]: 0 : if(maEMail.Len())
1930 : : {
1931 [ # # ]: 0 : aStr.AppendAscii( "<p><strong>" );
1932 [ # # ][ # # ]: 0 : aStr += RESTOHTML(STR_HTMLEXP_EMAIL);
[ # # ][ # # ]
[ # # ][ # # ]
1933 [ # # ]: 0 : aStr.AppendAscii( ":</strong> <a href=\"mailto:" );
1934 [ # # ][ # # ]: 0 : aStr += StringToURL(maEMail);
[ # # ]
1935 [ # # ]: 0 : aStr.AppendAscii( "\">" );
1936 [ # # ][ # # ]: 0 : aStr += StringToHTMLString(maEMail);
[ # # ]
1937 [ # # ]: 0 : aStr.AppendAscii( "</a></p>\r\n" );
1938 : : }
1939 : :
1940 [ # # ]: 0 : if(maHomePage.Len())
1941 : : {
1942 [ # # ]: 0 : aStr.AppendAscii( "<p><strong>" );
1943 [ # # ][ # # ]: 0 : aStr += RESTOHTML(STR_HTMLEXP_HOMEPAGE);
[ # # ][ # # ]
[ # # ][ # # ]
1944 [ # # ]: 0 : aStr.AppendAscii( ":</strong> <a href=\"" );
1945 [ # # ][ # # ]: 0 : aStr += StringToURL(maHomePage);
[ # # ]
1946 [ # # ]: 0 : aStr.AppendAscii( "\">" );
1947 [ # # ][ # # ]: 0 : aStr += StringToHTMLString(maHomePage);
[ # # ]
1948 [ # # ]: 0 : aStr.AppendAscii( "</a> </p>\r\n" );
1949 : : }
1950 : :
1951 [ # # ]: 0 : if(maInfo.Len())
1952 : : {
1953 [ # # ]: 0 : aStr.AppendAscii( "<p><strong>" );
1954 [ # # ][ # # ]: 0 : aStr += RESTOHTML(STR_HTMLEXP_INFO);
[ # # ][ # # ]
[ # # ][ # # ]
1955 [ # # ]: 0 : aStr.AppendAscii( ":</strong><br>\r\n" );
1956 [ # # ][ # # ]: 0 : aStr += StringToHTMLString(maInfo);
[ # # ]
1957 [ # # ]: 0 : aStr.AppendAscii( "</p>\r\n" );
1958 : : }
1959 : :
1960 [ # # ]: 0 : if(mbDownload)
1961 : : {
1962 [ # # ]: 0 : aStr.AppendAscii( "<p><a href=\"" );
1963 [ # # ][ # # ]: 0 : aStr += StringToURL(maDocFileName);
[ # # ]
1964 [ # # ]: 0 : aStr.AppendAscii( "\">" );
1965 [ # # ][ # # ]: 0 : aStr += RESTOHTML(STR_HTMLEXP_DOWNLOAD);
[ # # ][ # # ]
[ # # ][ # # ]
1966 [ # # ]: 0 : aStr.AppendAscii( "</a></p>\r\n" );
1967 : : }
1968 : :
1969 [ # # ]: 0 : for(sal_uInt16 nSdPage = 0; nSdPage < mnSdPageCount; nSdPage++)
1970 : : {
1971 [ # # ]: 0 : String aText;
1972 : :
1973 [ # # ]: 0 : aText.AppendAscii( "<img src=\"" );
1974 [ # # ][ # # ]: 0 : aText += StringToURL( *mpThumbnailFiles[nSdPage] );
[ # # ]
1975 [ # # ]: 0 : aText.AppendAscii( "\" width=\"256\" height=\"192\" alt=\"" );
1976 [ # # ][ # # ]: 0 : aText += StringToHTMLString( *mpPageNames[nSdPage] );
[ # # ]
1977 [ # # ]: 0 : aText.AppendAscii( "\">" );
1978 : :
1979 [ # # ][ # # ]: 0 : aStr += CreateLink(*mpHTMLFiles[nSdPage], aText);
[ # # ][ # # ]
[ # # ]
1980 [ # # ]: 0 : aStr.AppendAscii( "\r\n" );
1981 [ # # ]: 0 : }
1982 : :
1983 : :
1984 [ # # ]: 0 : aStr.AppendAscii( "</td></tr></table></center>\r\n" );
1985 : :
1986 [ # # ]: 0 : aStr.AppendAscii( "</body>\r\n</html>" );
1987 : :
1988 [ # # ]: 0 : bool bOk = WriteHtml( maIndex, false, aStr );
1989 : :
1990 [ # # ]: 0 : if (mpProgress)
1991 [ # # ]: 0 : mpProgress->SetState(++mnPagesWritten);
1992 : :
1993 [ # # ][ # # ]: 0 : return bOk;
1994 : : }
1995 : :
1996 : : // =====================================================================
1997 : : // Notiz Seiten erzeugen (fuer Frames)
1998 : : // =====================================================================
1999 : 0 : bool HtmlExport::CreateNotesPages()
2000 : : {
2001 : 0 : bool bOk = true;
2002 : :
2003 : 0 : SdrOutliner* pOutliner = mpDoc->GetInternalOutliner();
2004 [ # # ][ # # ]: 0 : for( sal_uInt16 nSdPage = 0; bOk && nSdPage < mnSdPageCount; nSdPage++ )
[ # # ]
2005 : : {
2006 : 0 : SdPage* pPage = maNotesPages[nSdPage];
2007 [ # # ]: 0 : if( mbDocColors )
2008 [ # # ]: 0 : SetDocColors( pPage );
2009 : :
2010 : : // Html Kopf
2011 [ # # ]: 0 : String aStr(maHTMLHeader);
2012 [ # # ][ # # ]: 0 : aStr += WriteMetaCharset();
[ # # ]
2013 [ # # ]: 0 : aStr.AppendAscii( " <title>" );
2014 [ # # ][ # # ]: 0 : aStr += StringToHTMLString(*mpPageNames[0]);
[ # # ]
2015 [ # # ]: 0 : aStr.AppendAscii( "</title>\r\n</head>\r\n" );
2016 [ # # ][ # # ]: 0 : aStr += CreateBodyTag();
[ # # ]
2017 : :
2018 [ # # ]: 0 : if(pPage)
2019 [ # # ][ # # ]: 0 : aStr += CreateTextForNotesPage( pOutliner, pPage, true, maBackColor );
[ # # ]
2020 : :
2021 [ # # ]: 0 : aStr.AppendAscii( "</body>\r\n</html>" );
2022 : :
2023 : 0 : OUString aFileName( "note" );
2024 : 0 : aFileName += OUString::valueOf(nSdPage);
2025 [ # # ][ # # ]: 0 : bOk = WriteHtml( aFileName, true, aStr );
[ # # ]
2026 : :
2027 : :
2028 : :
2029 [ # # ]: 0 : if (mpProgress)
2030 [ # # ]: 0 : mpProgress->SetState(++mnPagesWritten);
2031 [ # # ]: 0 : }
2032 : :
2033 : 0 : pOutliner->Clear();
2034 : :
2035 : 0 : return bOk;
2036 : : }
2037 : :
2038 : : // =====================================================================
2039 : : // Outline Seiten erzeugen (fuer Frames)
2040 : : // =====================================================================
2041 : 0 : bool HtmlExport::CreateOutlinePages()
2042 : : {
2043 : 0 : bool bOk = true;
2044 : :
2045 [ # # ]: 0 : if( mbDocColors )
2046 : : {
2047 : 0 : SetDocColors();
2048 : : }
2049 : :
2050 : : // Seite 0 wird der zugeklappte Outline, Seite 1 der aufgeklappte
2051 [ # # ][ # # ]: 0 : for (sal_Int32 nPage = 0; nPage < (mbImpress?2:1) && bOk; ++nPage)
[ # # ][ # # ]
2052 : : {
2053 : : // Html Kopf
2054 [ # # ]: 0 : String aStr(maHTMLHeader);
2055 [ # # ][ # # ]: 0 : aStr += WriteMetaCharset();
[ # # ]
2056 [ # # ]: 0 : aStr.AppendAscii( " <title>" );
2057 [ # # ][ # # ]: 0 : aStr += StringToHTMLString(*mpPageNames[0]);
[ # # ]
2058 [ # # ]: 0 : aStr.AppendAscii( "</title>\r\n</head>\r\n" );
2059 [ # # ][ # # ]: 0 : aStr += CreateBodyTag();
[ # # ]
2060 : :
2061 [ # # ]: 0 : SdrOutliner* pOutliner = mpDoc->GetInternalOutliner();
2062 [ # # ]: 0 : for(sal_uInt16 nSdPage = 0; nSdPage < mnSdPageCount; nSdPage++)
2063 : : {
2064 : 0 : SdPage* pPage = maPages[ nSdPage ];
2065 : :
2066 [ # # ]: 0 : aStr.AppendAscii( "<div align=\"left\">" );
2067 [ # # ]: 0 : String aLink( RTL_CONSTASCII_USTRINGPARAM( "JavaScript:parent.NavigateAbs(" ) );
2068 [ # # ][ # # ]: 0 : aLink += String::CreateFromInt32(nSdPage);
[ # # ]
2069 [ # # ]: 0 : aLink.Append( sal_Unicode(')') );
2070 : :
2071 [ # # ]: 0 : String aTitle = CreateTextForTitle(pOutliner,pPage, maBackColor);
2072 [ # # ]: 0 : if(aTitle.Len() == 0)
2073 [ # # ]: 0 : aTitle = *mpPageNames[nSdPage];
2074 : :
2075 [ # # ]: 0 : aStr.AppendAscii("<p style=\"");
2076 [ # # ][ # # ]: 0 : aStr.Append( getParagraphStyle( pOutliner, 0 ) );
[ # # ]
2077 [ # # ]: 0 : aStr.AppendAscii("\">");
2078 [ # # ][ # # ]: 0 : aStr += CreateLink(aLink, aTitle);
[ # # ][ # # ]
[ # # ]
2079 [ # # ]: 0 : aStr.AppendAscii("</p>");
2080 : :
2081 [ # # ]: 0 : if(nPage==1)
2082 : : {
2083 [ # # ][ # # ]: 0 : aStr += CreateTextForPage( pOutliner, pPage, false, maBackColor );
[ # # ]
2084 : : }
2085 [ # # ]: 0 : aStr.AppendAscii( "</div>\r\n" );
2086 [ # # ][ # # ]: 0 : }
2087 [ # # ]: 0 : pOutliner->Clear();
2088 : :
2089 [ # # ]: 0 : aStr.AppendAscii( "</body>\r\n</html>" );
2090 : :
2091 : 0 : OUString aFileName( "outline" );
2092 : 0 : aFileName += OUString::valueOf(nPage);
2093 [ # # ][ # # ]: 0 : bOk = WriteHtml( aFileName, true, aStr );
[ # # ]
2094 : :
2095 [ # # ]: 0 : if (mpProgress)
2096 [ # # ]: 0 : mpProgress->SetState(++mnPagesWritten);
2097 [ # # ]: 0 : }
2098 : :
2099 : 0 : return bOk;
2100 : : }
2101 : :
2102 : : // =====================================================================
2103 : : // Dateinamen festlegen
2104 : : // =====================================================================
2105 : 0 : void HtmlExport::CreateFileNames()
2106 : : {
2107 : : // Listen mit neuen Dateinamen anlegen
2108 : 0 : mpHTMLFiles = new String*[mnSdPageCount];
2109 : 0 : mpImageFiles = new String*[mnSdPageCount];
2110 : 0 : mpThumbnailFiles = new String*[mnSdPageCount];
2111 : 0 : mpPageNames = new String*[mnSdPageCount];
2112 : 0 : mpTextFiles = new String*[mnSdPageCount];
2113 : :
2114 : 0 : mbHeader = false; // Ueberschrift auf Uebersichtsseite?
2115 : :
2116 [ # # ]: 0 : for (sal_uInt16 nSdPage = 0; nSdPage < mnSdPageCount; nSdPage++)
2117 : : {
2118 : : String* pName;
2119 [ # # ][ # # ]: 0 : if(nSdPage == 0 && !mbContentsPage && !mbFrames )
[ # # ]
2120 [ # # ]: 0 : pName = new String(maIndex);
2121 : : else
2122 : : {
2123 [ # # ]: 0 : pName = new String( RTL_CONSTASCII_USTRINGPARAM("img") );
2124 [ # # ]: 0 : *pName += String::CreateFromInt32(nSdPage);
2125 : 0 : *pName += maHTMLExtension;
2126 : : }
2127 : :
2128 : 0 : mpHTMLFiles[nSdPage] = pName;
2129 : :
2130 [ # # ]: 0 : pName = new String( RTL_CONSTASCII_USTRINGPARAM("img") );
2131 [ # # ]: 0 : *pName += String::CreateFromInt32(nSdPage);
2132 [ # # ]: 0 : if( meFormat==FORMAT_GIF )
2133 : 0 : pName->AppendAscii( ".gif" );
2134 [ # # ]: 0 : else if( meFormat==FORMAT_JPG )
2135 : 0 : pName->AppendAscii( ".jpg" );
2136 : : else
2137 : 0 : pName->AppendAscii( ".png" );
2138 : :
2139 : 0 : mpImageFiles[nSdPage] = pName;
2140 : :
2141 [ # # ]: 0 : pName = new String( RTL_CONSTASCII_USTRINGPARAM("thumb") );
2142 [ # # ]: 0 : *pName += String::CreateFromInt32(nSdPage);
2143 [ # # ]: 0 : if( meFormat!=FORMAT_JPG )
2144 : 0 : pName->AppendAscii( ".png" );
2145 : : else
2146 : 0 : pName->AppendAscii( ".jpg" );
2147 : :
2148 : 0 : mpThumbnailFiles[nSdPage] = pName;
2149 : :
2150 [ # # ]: 0 : pName = new String( RTL_CONSTASCII_USTRINGPARAM("text"));
2151 [ # # ]: 0 : *pName += String::CreateFromInt32(nSdPage);
2152 : 0 : *pName += maHTMLExtension;
2153 : 0 : mpTextFiles[nSdPage] = pName;
2154 : :
2155 : 0 : SdPage* pSdPage = maPages[ nSdPage ];
2156 : :
2157 : : // get slide title from page name
2158 [ # # ]: 0 : String* pPageTitle = new String();
2159 : 0 : *pPageTitle = pSdPage->GetName();
2160 : 0 : mpPageNames[nSdPage] = pPageTitle;
2161 : : }
2162 : :
2163 [ # # ][ # # ]: 0 : if(!mbContentsPage && mbFrames)
2164 : 0 : maFramePage = maIndex;
2165 : : else
2166 : : {
2167 : 0 : maFramePage.AssignAscii( "siframes" );
2168 : 0 : maFramePage += maHTMLExtension;
2169 : : }
2170 : 0 : }
2171 : :
2172 : 0 : String HtmlExport::getDocumentTitle()
2173 : : {
2174 : : // check for a title object in this page, if its the first
2175 : : // title it becomes this documents title for the content
2176 : : // page
2177 [ # # ]: 0 : if( !mbHeader )
2178 : : {
2179 [ # # ]: 0 : if(mbImpress)
2180 : : {
2181 : : // falls es ein nicht-leeres Titelobjekt gibt, dessen ersten Absatz
2182 : : // als Seitentitel benutzen
2183 : 0 : SdPage* pSdPage = mpDoc->GetSdPage(0, PK_STANDARD);
2184 : 0 : SdrObject* pTitleObj = pSdPage->GetPresObj(PRESOBJ_TITLE);
2185 [ # # ][ # # ]: 0 : if (pTitleObj && !pTitleObj->IsEmptyPresObj())
[ # # ]
2186 : : {
2187 : 0 : OutlinerParaObject* pParaObject = pTitleObj->GetOutlinerParaObject();
2188 [ # # ]: 0 : if (pParaObject)
2189 : : {
2190 : : const EditTextObject& rEditTextObject =
2191 : 0 : pParaObject->GetTextObject();
2192 [ # # ]: 0 : if (&rEditTextObject)
2193 : : {
2194 [ # # ]: 0 : String aTest(rEditTextObject.GetText(0));
2195 [ # # ]: 0 : if (aTest.Len() > 0)
2196 [ # # ][ # # ]: 0 : mDocTitle = aTest;
2197 : : }
2198 : : }
2199 : : }
2200 : :
2201 [ # # ]: 0 : for( sal_uInt16 i = 0; i < mDocTitle.Len(); i++ )
2202 [ # # ]: 0 : if( mDocTitle.GetChar(i) == (sal_Unicode)0xff)
2203 : 0 : mDocTitle.SetChar(i, sal_Unicode(' ') );
2204 : : }
2205 : :
2206 [ # # ]: 0 : if( !mDocTitle.Len() )
2207 : : {
2208 : 0 : mDocTitle = maDocFileName;
2209 : 0 : int nDot = mDocTitle.Search( '.' );
2210 [ # # ]: 0 : if( nDot > 0 )
2211 : 0 : mDocTitle.Erase( (sal_uInt16)nDot );
2212 : : }
2213 : 0 : mbHeader = true;
2214 : : }
2215 : :
2216 : 0 : return mDocTitle;
2217 : : }
2218 : :
2219 : : static const char* JS_NavigateAbs =
2220 : : "function NavigateAbs( nPage )\r\n"
2221 : : "{\r\n"
2222 : : " frames[\"show\"].location.href = \"img\" + nPage + \".$EXT\";\r\n"
2223 : : " //frames[\"notes\"].location.href = \"note\" + nPage + \".$EXT\";\r\n"
2224 : : " nCurrentPage = nPage;\r\n"
2225 : : " if(nCurrentPage==0)\r\n"
2226 : : " {\r\n"
2227 : : " frames[\"navbar1\"].location.href = \"navbar0.$EXT\";\r\n"
2228 : : " }\r\n"
2229 : : " else if(nCurrentPage==nPageCount-1)\r\n"
2230 : : " {\r\n"
2231 : : " frames[\"navbar1\"].location.href = \"navbar2.$EXT\";\r\n"
2232 : : " }\r\n"
2233 : : " else\r\n"
2234 : : " {\r\n"
2235 : : " frames[\"navbar1\"].location.href = \"navbar1.$EXT\";\r\n"
2236 : : " }\r\n"
2237 : : "}\r\n\r\n";
2238 : :
2239 : : static const char* JS_NavigateRel =
2240 : : "function NavigateRel( nDelta )\r\n"
2241 : : "{\r\n"
2242 : : " var nPage = parseInt(nCurrentPage) + parseInt(nDelta);\r\n"
2243 : : " if( (nPage >= 0) && (nPage < nPageCount) )\r\n"
2244 : : " {\r\n"
2245 : : " NavigateAbs( nPage );\r\n"
2246 : : " }\r\n"
2247 : : "}\r\n\r\n";
2248 : :
2249 : : static const char* JS_ExpandOutline =
2250 : : "function ExpandOutline()\r\n"
2251 : : "{\r\n"
2252 : : " frames[\"navbar2\"].location.href = \"navbar4.$EXT\";\r\n"
2253 : : " frames[\"outline\"].location.href = \"outline1.$EXT\";\r\n"
2254 : : "}\r\n\r\n";
2255 : :
2256 : : static const char * JS_CollapseOutline =
2257 : : "function CollapseOutline()\r\n"
2258 : : "{\r\n"
2259 : : " frames[\"navbar2\"].location.href = \"navbar3.$EXT\";\r\n"
2260 : : " frames[\"outline\"].location.href = \"outline0.$EXT\";\r\n"
2261 : : "}\r\n\r\n";
2262 : :
2263 : : // ====================================================================
2264 : : // Seite mit den Frames erzeugen
2265 : : // ====================================================================
2266 : 0 : bool HtmlExport::CreateFrames()
2267 : : {
2268 [ # # ]: 0 : String aTmp;
2269 : : String aStr( RTL_CONSTASCII_USTRINGPARAM(
2270 : : "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Frameset//EN\"\r\n"
2271 : : " \"http://www.w3.org/TR/html4/frameset.dtd\">\r\n"
2272 [ # # ]: 0 : "<html>\r\n<head>\r\n" ) );
2273 : :
2274 [ # # ][ # # ]: 0 : aStr += WriteMetaCharset();
[ # # ]
2275 [ # # ]: 0 : aStr.AppendAscii( " <title>" );
2276 [ # # ][ # # ]: 0 : aStr += StringToHTMLString(*mpPageNames[0]);
[ # # ]
2277 [ # # ]: 0 : aStr.AppendAscii( "</title>\r\n" );
2278 : :
2279 [ # # ]: 0 : aStr.AppendAscii( "<script type=\"text/javascript\">\r\n<!--\r\n" );
2280 : :
2281 [ # # ]: 0 : aStr.AppendAscii( "var nCurrentPage = 0;\r\nvar nPageCount = " );
2282 [ # # ][ # # ]: 0 : aStr += String::CreateFromInt32(mnSdPageCount);
[ # # ]
2283 [ # # ]: 0 : aStr.AppendAscii( ";\r\n\r\n" );
2284 : :
2285 [ # # ]: 0 : String aFunction;
2286 [ # # ]: 0 : aFunction.AssignAscii(JS_NavigateAbs);
2287 : :
2288 [ # # ]: 0 : if(mbNotes)
2289 : : {
2290 [ # # ]: 0 : String aEmpty;
2291 [ # # ]: 0 : String aSlash( RTL_CONSTASCII_USTRINGPARAM( "//" ) );
2292 [ # # ][ # # ]: 0 : aFunction.SearchAndReplaceAll( aSlash, aEmpty);
[ # # ]
2293 : : }
2294 : :
2295 : : // substitute HTML file extension
2296 [ # # ]: 0 : String aPlaceHolder(RTL_CONSTASCII_USTRINGPARAM(".$EXT"));
2297 [ # # ]: 0 : aFunction.SearchAndReplaceAll(aPlaceHolder, maHTMLExtension);
2298 [ # # ]: 0 : aStr += aFunction;
2299 : :
2300 [ # # ]: 0 : aTmp.AssignAscii( JS_NavigateRel );
2301 [ # # ]: 0 : aTmp.SearchAndReplaceAll(aPlaceHolder, maHTMLExtension);
2302 [ # # ]: 0 : aStr += aTmp;
2303 : :
2304 [ # # ]: 0 : if(mbImpress)
2305 : : {
2306 [ # # ]: 0 : aTmp.AssignAscii( JS_ExpandOutline );
2307 [ # # ]: 0 : aTmp.SearchAndReplaceAll(aPlaceHolder, maHTMLExtension);
2308 [ # # ]: 0 : aStr += aTmp;
2309 : :
2310 [ # # ]: 0 : aTmp.AssignAscii( JS_CollapseOutline );
2311 [ # # ]: 0 : aTmp.SearchAndReplaceAll(aPlaceHolder, maHTMLExtension);
2312 [ # # ]: 0 : aStr += aTmp;
2313 : : }
2314 [ # # ]: 0 : aStr.AppendAscii( "// -->\r\n</script>\r\n" );
2315 : :
2316 [ # # ]: 0 : aStr.AppendAscii( "</head>\r\n" );
2317 : :
2318 [ # # ]: 0 : aStr.AppendAscii( "<frameset cols=\"*," );
2319 [ # # ][ # # ]: 0 : aStr += String::CreateFromInt32((mnWidthPixel + 16));
[ # # ]
2320 [ # # ]: 0 : aStr.AppendAscii( "\">\r\n" );
2321 [ # # ]: 0 : if(mbImpress)
2322 : : {
2323 [ # # ]: 0 : aStr.AppendAscii( " <frameset rows=\"42,*\">\r\n" );
2324 [ # # ]: 0 : aStr.AppendAscii( " <frame src=\"navbar3" );
2325 [ # # ][ # # ]: 0 : aStr += StringToURL(maHTMLExtension);
[ # # ]
2326 [ # # ]: 0 : aStr.AppendAscii( "\" name=\"navbar2\" marginwidth=\"4\" marginheight=\"4\" scrolling=\"no\">\r\n" );
2327 : : }
2328 [ # # ]: 0 : aStr.AppendAscii( " <frame src=\"outline0" );
2329 [ # # ][ # # ]: 0 : aStr += StringToURL(maHTMLExtension);
[ # # ]
2330 [ # # ]: 0 : aStr.AppendAscii( "\" name=\"outline\">\r\n" );
2331 [ # # ]: 0 : if(mbImpress)
2332 [ # # ]: 0 : aStr.AppendAscii( " </frameset>\r\n" );
2333 : :
2334 [ # # ]: 0 : if(mbNotes)
2335 : : {
2336 [ # # ]: 0 : aStr.AppendAscii( " <frameset rows=\"42," );
2337 [ # # ][ # # ]: 0 : aStr += String::CreateFromInt32((int)((double)mnWidthPixel * 0.75) + 16);
[ # # ]
2338 [ # # ]: 0 : aStr.AppendAscii( ",*\">\r\n" );
2339 : : }
2340 : : else
2341 [ # # ]: 0 : aStr.AppendAscii( " <frameset rows=\"42,*\">\r\n" );
2342 : :
2343 [ # # ]: 0 : aStr.AppendAscii( " <frame src=\"navbar0" );
2344 [ # # ][ # # ]: 0 : aStr += StringToURL(maHTMLExtension);
[ # # ]
2345 [ # # ]: 0 : aStr.AppendAscii( "\" name=\"navbar1\" marginwidth=\"4\" marginheight=\"4\" scrolling=\"no\">\r\n" );
2346 : :
2347 [ # # ]: 0 : aStr.AppendAscii( " <frame src=\"" );
2348 [ # # ][ # # ]: 0 : aStr += StringToURL(*mpHTMLFiles[0]);
[ # # ]
2349 [ # # ]: 0 : aStr.AppendAscii( "\" name=\"show\" marginwidth=\"4\" marginheight=\"4\">\r\n" );
2350 : :
2351 [ # # ]: 0 : if(mbNotes)
2352 : : {
2353 [ # # ]: 0 : aStr.AppendAscii( " <frame src=\"note0" );
2354 [ # # ][ # # ]: 0 : aStr += StringToURL(maHTMLExtension);
[ # # ]
2355 [ # # ]: 0 : aStr.AppendAscii( "\" name=\"notes\">\r\n" );
2356 : : }
2357 [ # # ]: 0 : aStr.AppendAscii( " </frameset>\r\n" );
2358 : :
2359 [ # # ]: 0 : aStr.AppendAscii( "<noframes>\r\n" );
2360 [ # # ][ # # ]: 0 : aStr += CreateBodyTag();
[ # # ]
2361 [ # # ][ # # ]: 0 : aStr += RESTOHTML(STR_HTMLEXP_NOFRAMES);
[ # # ][ # # ]
[ # # ][ # # ]
2362 [ # # ]: 0 : aStr.AppendAscii( "\r\n</noframes>\r\n</frameset>\r\n</html>" );
2363 : :
2364 [ # # ]: 0 : bool bOk = WriteHtml( maFramePage, false, aStr );
2365 : :
2366 [ # # ]: 0 : if (mpProgress)
2367 [ # # ]: 0 : mpProgress->SetState(++mnPagesWritten);
2368 : :
2369 [ # # ][ # # ]: 0 : return bOk;
[ # # ][ # # ]
2370 : : }
2371 : :
2372 : : // ====================================================================
2373 : : // Buttonleiste fuer Standard ausgeben
2374 : : // Es werden 4 html files erstellt
2375 : : // navbar0.htm Navigationsleiste Grafik fuer erste Seite
2376 : : // navbar1.htm Navigationsleiste Grafik fuer zweite bis vorletzte Seite
2377 : : // navbar2.htm Navigationsleiste Grafik fuer letzte Seite
2378 : : // navbar3.htm Navigationsleiste Outline zugeklappt
2379 : : // navbar4.htm Navigationsleiste Outline aufgeklappt
2380 : : // ====================================================================
2381 : 0 : bool HtmlExport::CreateNavBarFrames()
2382 : : {
2383 : 0 : bool bOk = true;
2384 [ # # ]: 0 : String aButton;
2385 : :
2386 [ # # ]: 0 : if( mbDocColors )
2387 : : {
2388 [ # # ]: 0 : SetDocColors();
2389 : 0 : maBackColor = maFirstPageColor;
2390 : : }
2391 : :
2392 [ # # ][ # # ]: 0 : for( int nFile = 0; nFile < 3 && bOk; nFile++ )
[ # # ]
2393 : : {
2394 [ # # ]: 0 : String aStr(maHTMLHeader);
2395 [ # # ][ # # ]: 0 : aStr += WriteMetaCharset();
[ # # ]
2396 [ # # ]: 0 : aStr.AppendAscii( " <title>" );
2397 [ # # ][ # # ]: 0 : aStr += StringToHTMLString(*mpPageNames[0]);
[ # # ]
2398 [ # # ]: 0 : aStr.AppendAscii( "</title>\r\n</head>\r\n" );
2399 [ # # ][ # # ]: 0 : aStr += CreateBodyTag();
[ # # ]
2400 [ # # ]: 0 : aStr.AppendAscii( "<center>\r\n" );
2401 : :
2402 : : // erste Seite
2403 [ # # ][ # # ]: 0 : aButton = String(SdResId(STR_HTMLEXP_FIRSTPAGE));
[ # # ][ # # ]
2404 [ # # ]: 0 : if(mnButtonThema != -1)
2405 : : aButton = CreateImage(GetButtonName((nFile == 0 || mnSdPageCount == 1?
2406 [ # # ][ # # ]: 0 : BTN_FIRST_0:BTN_FIRST_1)), aButton);
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ]
2407 : :
2408 [ # # ][ # # ]: 0 : if(nFile != 0 && mnSdPageCount > 1)
2409 [ # # ][ # # ]: 0 : aButton = CreateLink( String(RTL_CONSTASCII_USTRINGPARAM("JavaScript:parent.NavigateAbs(0)")), aButton);
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ]
2410 : :
2411 [ # # ]: 0 : aStr += aButton;
2412 [ # # ]: 0 : aStr.AppendAscii( "\r\n" );
2413 : :
2414 : : // zur vorherigen Seite
2415 [ # # ][ # # ]: 0 : aButton = String(SdResId(STR_PUBLISH_BACK));
[ # # ][ # # ]
2416 [ # # ]: 0 : if(mnButtonThema != -1)
2417 : : aButton = CreateImage(GetButtonName((nFile == 0 || mnSdPageCount == 1?
2418 [ # # ][ # # ]: 0 : BTN_PREV_0:BTN_PREV_1)), aButton);
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ]
2419 : :
2420 [ # # ][ # # ]: 0 : if(nFile != 0 && mnSdPageCount > 1)
2421 [ # # ][ # # ]: 0 : aButton = CreateLink( String(RTL_CONSTASCII_USTRINGPARAM("JavaScript:parent.NavigateRel(-1)")), aButton);
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ]
2422 : :
2423 [ # # ]: 0 : aStr += aButton;
2424 [ # # ]: 0 : aStr.AppendAscii( "\r\n" );
2425 : :
2426 : : // zur naechsten Seite
2427 [ # # ][ # # ]: 0 : aButton = String(SdResId(STR_PUBLISH_NEXT));
[ # # ][ # # ]
2428 [ # # ]: 0 : if(mnButtonThema != -1)
2429 : : aButton = CreateImage(GetButtonName((nFile ==2 || mnSdPageCount == 1?
2430 [ # # ][ # # ]: 0 : BTN_NEXT_0:BTN_NEXT_1)), aButton);
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ]
2431 : :
2432 [ # # ][ # # ]: 0 : if(nFile != 2 && mnSdPageCount > 1)
2433 [ # # ][ # # ]: 0 : aButton = CreateLink(String(RTL_CONSTASCII_USTRINGPARAM("JavaScript:parent.NavigateRel(1)")), aButton);
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ]
2434 : :
2435 [ # # ]: 0 : aStr += aButton;
2436 [ # # ]: 0 : aStr.AppendAscii( "\r\n" );
2437 : :
2438 : : // zur letzten Seite
2439 [ # # ][ # # ]: 0 : aButton = String(SdResId(STR_HTMLEXP_LASTPAGE));
[ # # ][ # # ]
2440 [ # # ]: 0 : if(mnButtonThema != -1)
2441 : : aButton = CreateImage(GetButtonName((nFile ==2 || mnSdPageCount == 1?
2442 [ # # ][ # # ]: 0 : BTN_LAST_0:BTN_LAST_1)), aButton);
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ]
2443 : :
2444 [ # # ][ # # ]: 0 : if(nFile != 2 && mnSdPageCount > 1)
2445 : : {
2446 [ # # ]: 0 : String aLink(RTL_CONSTASCII_USTRINGPARAM("JavaScript:parent.NavigateAbs("));
2447 [ # # ][ # # ]: 0 : aLink += String::CreateFromInt32(mnSdPageCount-1);
[ # # ]
2448 [ # # ]: 0 : aLink.AppendAscii( ")" );
2449 [ # # ][ # # ]: 0 : aButton = CreateLink( aLink, aButton);
[ # # ][ # # ]
[ # # ][ # # ]
2450 : : }
2451 : :
2452 [ # # ]: 0 : aStr += aButton;
2453 [ # # ]: 0 : aStr.AppendAscii( "\r\n" );
2454 : :
2455 : : // Inhalt
2456 [ # # ]: 0 : if (mbContentsPage)
2457 : : {
2458 [ # # ][ # # ]: 0 : aButton = String(SdResId(STR_PUBLISH_OUTLINE));
[ # # ][ # # ]
2459 [ # # ]: 0 : if(mnButtonThema != -1)
2460 [ # # ][ # # ]: 0 : aButton = CreateImage(GetButtonName(BTN_INDEX), aButton);
[ # # ][ # # ]
[ # # ]
2461 : :
2462 : : // zur Uebersicht
2463 [ # # ][ # # ]: 0 : aStr += CreateLink(maIndex, aButton, String(RTL_CONSTASCII_USTRINGPARAM("_top")));
[ # # ][ # # ]
[ # # ]
2464 [ # # ]: 0 : aStr.AppendAscii( "\r\n" );
2465 : : }
2466 : :
2467 : : // Textmodus
2468 [ # # ]: 0 : if(mbImpress)
2469 : : {
2470 [ # # ][ # # ]: 0 : aButton = String(SdResId(STR_HTMLEXP_SETTEXT));
[ # # ][ # # ]
2471 [ # # ]: 0 : if(mnButtonThema != -1)
2472 [ # # ][ # # ]: 0 : aButton = CreateImage(GetButtonName(BTN_TEXT), aButton);
[ # # ][ # # ]
[ # # ]
2473 : :
2474 [ # # ]: 0 : String aText0( RTL_CONSTASCII_USTRINGPARAM("text0"));
2475 [ # # ]: 0 : aText0 += maHTMLExtension;
2476 [ # # ][ # # ]: 0 : aStr += CreateLink( aText0, aButton, String(RTL_CONSTASCII_USTRINGPARAM("_top")));
[ # # ][ # # ]
[ # # ]
2477 [ # # ][ # # ]: 0 : aStr.AppendAscii( "\r\n" );
2478 : : }
2479 : :
2480 : : // Und fertich...
2481 [ # # ]: 0 : aStr.AppendAscii( "</center>\r\n" );
2482 [ # # ]: 0 : aStr.AppendAscii( "</body>\r\n</html>" );
2483 : :
2484 [ # # ]: 0 : String aFileName( RTL_CONSTASCII_USTRINGPARAM("navbar") );
2485 [ # # ][ # # ]: 0 : aFileName += String::CreateFromInt32(nFile);
[ # # ]
2486 : :
2487 [ # # ]: 0 : bOk = WriteHtml( aFileName, true, aStr );
2488 : :
2489 [ # # ]: 0 : if (mpProgress)
2490 [ # # ]: 0 : mpProgress->SetState(++mnPagesWritten);
2491 [ # # ][ # # ]: 0 : }
2492 : :
2493 : : // Jetzt kommt die Navigatonsleiste Outliner zugeklappt...
2494 [ # # ]: 0 : if(bOk)
2495 : : {
2496 [ # # ]: 0 : String aStr(maHTMLHeader);
2497 [ # # ][ # # ]: 0 : aStr += WriteMetaCharset();
[ # # ]
2498 [ # # ]: 0 : aStr.AppendAscii( " <title>" );
2499 [ # # ][ # # ]: 0 : aStr += StringToHTMLString(*mpPageNames[0]);
[ # # ]
2500 [ # # ]: 0 : aStr.AppendAscii( "</title>\r\n</head>\r\n" );
2501 [ # # ][ # # ]: 0 : aStr += CreateBodyTag();
[ # # ]
2502 : :
2503 [ # # ][ # # ]: 0 : aButton = String(SdResId(STR_HTMLEXP_OUTLINE));
[ # # ][ # # ]
2504 [ # # ]: 0 : if(mnButtonThema != -1)
2505 [ # # ][ # # ]: 0 : aButton = CreateImage(GetButtonName(BTN_MORE), aButton);
[ # # ][ # # ]
[ # # ]
2506 : :
2507 [ # # ][ # # ]: 0 : aStr += CreateLink(String(RTL_CONSTASCII_USTRINGPARAM("JavaScript:parent.ExpandOutline()")), aButton);
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ]
2508 [ # # ]: 0 : aStr.AppendAscii( "</body>\r\n</html>" );
2509 : :
2510 [ # # ]: 0 : String aFileName( RTL_CONSTASCII_USTRINGPARAM("navbar3") );
2511 : :
2512 [ # # ]: 0 : bOk = WriteHtml( aFileName, true, aStr );
2513 : :
2514 [ # # ]: 0 : if (mpProgress)
2515 [ # # ][ # # ]: 0 : mpProgress->SetState(++mnPagesWritten);
[ # # ]
2516 : : }
2517 : :
2518 : : // ... und jetzt Outliner aufgeklappt
2519 [ # # ]: 0 : if( bOk )
2520 : : {
2521 [ # # ]: 0 : String aStr(maHTMLHeader);
2522 [ # # ][ # # ]: 0 : aStr += WriteMetaCharset();
[ # # ]
2523 [ # # ]: 0 : aStr.AppendAscii( " <title>" );
2524 [ # # ][ # # ]: 0 : aStr += StringToHTMLString(*mpPageNames[0]);
[ # # ]
2525 [ # # ]: 0 : aStr.AppendAscii( "</title>\r\n</head>\r\n" );
2526 [ # # ][ # # ]: 0 : aStr += CreateBodyTag();
[ # # ]
2527 : :
2528 [ # # ][ # # ]: 0 : aButton = String(SdResId(STR_HTMLEXP_NOOUTLINE));
[ # # ][ # # ]
2529 [ # # ]: 0 : if(mnButtonThema != -1)
2530 [ # # ][ # # ]: 0 : aButton = CreateImage(GetButtonName(BTN_LESS), aButton);
[ # # ][ # # ]
[ # # ]
2531 : :
2532 [ # # ][ # # ]: 0 : aStr += CreateLink(String(RTL_CONSTASCII_USTRINGPARAM("JavaScript:parent.CollapseOutline()")), aButton);
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ]
2533 [ # # ]: 0 : aStr.AppendAscii( "</body>\r\n</html>" );
2534 : :
2535 [ # # ]: 0 : String aFileName( RTL_CONSTASCII_USTRINGPARAM("navbar4") );
2536 [ # # ]: 0 : bOk = WriteHtml( aFileName, true, aStr );
2537 : :
2538 [ # # ]: 0 : if (mpProgress)
2539 [ # # ][ # # ]: 0 : mpProgress->SetState(++mnPagesWritten);
[ # # ]
2540 : :
2541 : : }
2542 : :
2543 [ # # ]: 0 : return bOk;
2544 : : }
2545 : :
2546 : : // ====================================================================
2547 : : // Buttonleiste fuer Standard ausgeben
2548 : : // ====================================================================
2549 : 0 : String HtmlExport::CreateNavBar( sal_uInt16 nSdPage, bool bIsText ) const
2550 : : {
2551 : : // Navigationsleiste vorbereiten
2552 [ # # ][ # # ]: 0 : String aStrNavFirst( SdResId(STR_HTMLEXP_FIRSTPAGE) );
2553 [ # # ][ # # ]: 0 : String aStrNavPrev( SdResId(STR_PUBLISH_BACK) );
2554 [ # # ][ # # ]: 0 : String aStrNavNext( SdResId(STR_PUBLISH_NEXT) );
2555 [ # # ][ # # ]: 0 : String aStrNavLast( SdResId(STR_HTMLEXP_LASTPAGE) );
2556 [ # # ][ # # ]: 0 : String aStrNavContent( SdResId(STR_PUBLISH_OUTLINE) );
2557 [ # # ]: 0 : String aStrNavText;
2558 [ # # ]: 0 : if( bIsText )
2559 : : {
2560 [ # # ][ # # ]: 0 : aStrNavText = String( SdResId(STR_HTMLEXP_SETGRAPHIC) );
[ # # ][ # # ]
2561 : : }
2562 : : else
2563 : : {
2564 [ # # ][ # # ]: 0 : aStrNavText = String( SdResId(STR_HTMLEXP_SETTEXT) );
[ # # ][ # # ]
2565 : : }
2566 : :
2567 [ # # ][ # # ]: 0 : if(!bIsText && mnButtonThema != -1)
2568 : : {
2569 [ # # ][ # # ]: 0 : if(nSdPage<1 || mnSdPageCount == 1)
2570 : : {
2571 [ # # ][ # # ]: 0 : aStrNavFirst = CreateImage(GetButtonName(BTN_FIRST_0), aStrNavFirst);
[ # # ][ # # ]
[ # # ]
2572 [ # # ][ # # ]: 0 : aStrNavPrev = CreateImage(GetButtonName(BTN_PREV_0), aStrNavPrev);
[ # # ][ # # ]
[ # # ]
2573 : : }
2574 : : else
2575 : : {
2576 [ # # ][ # # ]: 0 : aStrNavFirst = CreateImage(GetButtonName(BTN_FIRST_1), aStrNavFirst);
[ # # ][ # # ]
[ # # ]
2577 [ # # ][ # # ]: 0 : aStrNavPrev = CreateImage(GetButtonName(BTN_PREV_1), aStrNavPrev);
[ # # ][ # # ]
[ # # ]
2578 : : }
2579 : :
2580 [ # # ][ # # ]: 0 : if(nSdPage == mnSdPageCount-1 || mnSdPageCount == 1)
2581 : : {
2582 [ # # ][ # # ]: 0 : aStrNavNext = CreateImage(GetButtonName(BTN_NEXT_0), aStrNavNext);
[ # # ][ # # ]
[ # # ]
2583 [ # # ][ # # ]: 0 : aStrNavLast = CreateImage(GetButtonName(BTN_LAST_0), aStrNavLast);
[ # # ][ # # ]
[ # # ]
2584 : : }
2585 : : else
2586 : : {
2587 [ # # ][ # # ]: 0 : aStrNavNext = CreateImage(GetButtonName(BTN_NEXT_1), aStrNavNext);
[ # # ][ # # ]
[ # # ]
2588 [ # # ][ # # ]: 0 : aStrNavLast = CreateImage(GetButtonName(BTN_LAST_1), aStrNavLast);
[ # # ][ # # ]
[ # # ]
2589 : : }
2590 : :
2591 [ # # ][ # # ]: 0 : aStrNavContent = CreateImage(GetButtonName(BTN_INDEX), aStrNavContent);
[ # # ][ # # ]
[ # # ]
2592 [ # # ][ # # ]: 0 : aStrNavText = CreateImage(GetButtonName(BTN_TEXT), aStrNavText);
[ # # ][ # # ]
[ # # ]
2593 : : }
2594 : :
2595 [ # # ]: 0 : String aStr( RTL_CONSTASCII_USTRINGPARAM("<center>\r\n")); //<table><tr>\r\n");
2596 : :
2597 : : // erste Seite
2598 [ # # ]: 0 : if(nSdPage > 0)
2599 [ # # ][ # # ]: 0 : aStr += CreateLink(bIsText?*mpTextFiles[0]:*mpHTMLFiles[0],aStrNavFirst);
[ # # ][ # # ]
[ # # ][ # # ]
2600 : : else
2601 [ # # ]: 0 : aStr += aStrNavFirst;
2602 [ # # ]: 0 : aStr.Append(sal_Unicode(' '));
2603 : :
2604 : : // to Previous page
2605 [ # # ]: 0 : if(nSdPage > 0)
2606 : 0 : aStr += CreateLink( bIsText?*mpTextFiles[nSdPage-1]:
2607 [ # # ][ # # ]: 0 : *mpHTMLFiles[nSdPage-1], aStrNavPrev);
[ # # ][ # # ]
[ # # ][ # # ]
2608 : : else
2609 [ # # ]: 0 : aStr += aStrNavPrev;
2610 [ # # ]: 0 : aStr.Append(sal_Unicode(' '));
2611 : :
2612 : : // to Next page
2613 [ # # ]: 0 : if(nSdPage < mnSdPageCount-1)
2614 : 0 : aStr += CreateLink( bIsText?*mpTextFiles[nSdPage+1]:
2615 [ # # ][ # # ]: 0 : *mpHTMLFiles[nSdPage+1], aStrNavNext);
[ # # ][ # # ]
[ # # ][ # # ]
2616 : : else
2617 [ # # ]: 0 : aStr += aStrNavNext;
2618 [ # # ]: 0 : aStr.Append(sal_Unicode(' '));
2619 : :
2620 : : // to Last page
2621 [ # # ]: 0 : if(nSdPage < mnSdPageCount-1)
2622 : 0 : aStr += CreateLink( bIsText?*mpTextFiles[mnSdPageCount-1]:
2623 : 0 : *mpHTMLFiles[mnSdPageCount-1],
2624 [ # # ][ # # ]: 0 : aStrNavLast );
[ # # ][ # # ]
[ # # ][ # # ]
2625 : : else
2626 [ # # ]: 0 : aStr += aStrNavLast;
2627 [ # # ]: 0 : aStr.Append(sal_Unicode(' '));
2628 : :
2629 : : // to Index page
2630 [ # # ]: 0 : if (mbContentsPage)
2631 : : {
2632 [ # # ][ # # ]: 0 : aStr += CreateLink(maIndex, aStrNavContent);
[ # # ][ # # ]
[ # # ]
2633 [ # # ]: 0 : aStr.Append(sal_Unicode(' '));
2634 : : }
2635 : :
2636 : : // Text/Graphics
2637 [ # # ]: 0 : if(mbImpress)
2638 : : {
2639 : 0 : aStr += CreateLink( bIsText?(mbFrames?maFramePage:*mpHTMLFiles[nSdPage]):
2640 [ # # ][ # # ]: 0 : *mpTextFiles[nSdPage], aStrNavText);
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ]
2641 : :
2642 : : }
2643 : :
2644 [ # # ]: 0 : aStr.AppendAscii( "</center><br>\r\n" );
2645 : :
2646 [ # # ][ # # ]: 0 : return aStr;
[ # # ][ # # ]
[ # # ][ # # ]
2647 : : }
2648 : :
2649 : : /** export navigation graphics from button set */
2650 : 0 : bool HtmlExport::CreateBitmaps()
2651 : : {
2652 [ # # ][ # # ]: 0 : if(mnButtonThema != -1 && mpButtonSet.get() )
[ # # ]
2653 : : {
2654 [ # # ]: 0 : for( int nButton = 0; nButton < NUM_BUTTONS; nButton++ )
2655 : : {
2656 [ # # ][ # # ]: 0 : if(!mbFrames && (nButton == BTN_MORE || nButton == BTN_LESS))
[ # # ]
2657 : 0 : continue;
2658 : :
2659 [ # # ][ # # ]: 0 : if(!mbImpress && (nButton == BTN_TEXT || nButton == BTN_MORE || nButton == BTN_LESS ))
[ # # ][ # # ]
2660 : 0 : continue;
2661 : :
2662 [ # # ]: 0 : OUString aFull(maExportPath);
2663 [ # # ][ # # ]: 0 : aFull += GetButtonName(nButton);
[ # # ]
2664 [ # # ][ # # ]: 0 : mpButtonSet->exportButton( mnButtonThema, aFull, GetButtonName(nButton) );
[ # # ][ # # ]
2665 : 0 : }
2666 : : }
2667 : 0 : return true;
2668 : : }
2669 : :
2670 : : // =====================================================================
2671 : : // Erzeugt den <body> Tag, inkl. der eingestellten Farbattribute
2672 : : // =====================================================================
2673 : 0 : String HtmlExport::CreateBodyTag() const
2674 : : {
2675 : 0 : String aStr( RTL_CONSTASCII_USTRINGPARAM("<body") );
2676 : :
2677 [ # # ][ # # ]: 0 : if( mbUserAttr || mbDocColors )
2678 : : {
2679 : 0 : Color aTextColor( maTextColor );
2680 [ # # ][ # # ]: 0 : if( (aTextColor == COL_AUTO) && (!maBackColor.IsDark()) )
[ # # ][ # # ]
[ # # # # ]
2681 : 0 : aTextColor = COL_BLACK;
2682 : :
2683 [ # # ]: 0 : aStr.AppendAscii( " text=\"" );
2684 [ # # ][ # # ]: 0 : aStr += ColorToHTMLString( aTextColor );
[ # # ]
2685 [ # # ]: 0 : aStr.AppendAscii( "\" bgcolor=\"" );
2686 [ # # ][ # # ]: 0 : aStr += ColorToHTMLString( maBackColor );
[ # # ]
2687 [ # # ]: 0 : aStr.AppendAscii( "\" link=\"" );
2688 [ # # ][ # # ]: 0 : aStr += ColorToHTMLString( maLinkColor );
[ # # ]
2689 [ # # ]: 0 : aStr.AppendAscii( "\" vlink=\"" );
2690 [ # # ][ # # ]: 0 : aStr += ColorToHTMLString( maVLinkColor );
[ # # ]
2691 [ # # ]: 0 : aStr.AppendAscii( "\" alink=\"" );
2692 [ # # ][ # # ]: 0 : aStr += ColorToHTMLString( maALinkColor );
[ # # ]
2693 [ # # ]: 0 : aStr.AppendAscii( "\"" );
2694 : : }
2695 : :
2696 [ # # ]: 0 : aStr.AppendAscii( ">\r\n" );
2697 : :
2698 : 0 : return aStr;
2699 : : }
2700 : :
2701 : : // =====================================================================
2702 : : // Erzeugt einen Hyperlink
2703 : : // =====================================================================
2704 : 0 : String HtmlExport::CreateLink( const String& aLink,
2705 : : const String& aText,
2706 : : const String& aTarget ) const
2707 : : {
2708 : 0 : String aStr( RTL_CONSTASCII_USTRINGPARAM("<a href=\""));
2709 [ # # ][ # # ]: 0 : aStr += StringToURL(aLink);
[ # # ]
2710 [ # # ]: 0 : if(aTarget.Len())
2711 : : {
2712 [ # # ]: 0 : aStr.AppendAscii( "\" target=\"" );
2713 [ # # ]: 0 : aStr += aTarget;
2714 : : }
2715 [ # # ]: 0 : aStr.AppendAscii( "\">" );
2716 [ # # ]: 0 : aStr += aText;
2717 [ # # ]: 0 : aStr.AppendAscii( "</a>" );
2718 : :
2719 : 0 : return aStr;
2720 : : }
2721 : :
2722 : : // =====================================================================
2723 : : // Erzeugt ein Image-tag
2724 : : // =====================================================================
2725 : 0 : String HtmlExport::CreateImage( const String& aImage, const String& aAltText,
2726 : : sal_Int16 nWidth,
2727 : : sal_Int16 nHeight ) const
2728 : : {
2729 : 0 : String aStr( RTL_CONSTASCII_USTRINGPARAM("<img src=\""));
2730 [ # # ][ # # ]: 0 : aStr += StringToURL(aImage);
[ # # ]
2731 [ # # ]: 0 : aStr.AppendAscii( "\" border=0" );
2732 : :
2733 [ # # ]: 0 : if( aAltText.Len())
2734 : : {
2735 [ # # ]: 0 : aStr.AppendAscii( " alt=\"" );
2736 [ # # ]: 0 : aStr += aAltText;
2737 [ # # ]: 0 : aStr.Append(sal_Unicode('"'));
2738 : : }
2739 : : else
2740 : : {
2741 : : // Agerskov: HTML 4.01 has to have an alt attribut even if it is an empty string
2742 [ # # ]: 0 : aStr.AppendAscii( " alt=\"\"" );
2743 : : }
2744 : :
2745 [ # # ]: 0 : if(nWidth > -1)
2746 : : {
2747 [ # # ]: 0 : aStr.AppendAscii( " width=" );
2748 [ # # ][ # # ]: 0 : aStr += String::CreateFromInt32(nWidth);
[ # # ]
2749 : : }
2750 : :
2751 [ # # ]: 0 : if(nHeight > -1)
2752 : : {
2753 [ # # ]: 0 : aStr.AppendAscii( " height=" );
2754 [ # # ][ # # ]: 0 : aStr += String::CreateFromInt32(nHeight);
[ # # ]
2755 : : }
2756 : :
2757 [ # # ]: 0 : aStr.Append(sal_Unicode('>'));
2758 : :
2759 : 0 : return aStr;
2760 : : }
2761 : :
2762 : : // =====================================================================
2763 : : // Area fuer Kreis erzeugen; es werden Pixelkoordinaten erwartet
2764 : : // =====================================================================
2765 : 0 : String HtmlExport::ColorToHTMLString( Color aColor )
2766 : : {
2767 : : static char hex[] = "0123456789ABCDEF";
2768 : 0 : String aStr( RTL_CONSTASCII_USTRINGPARAM("#xxxxxx"));
2769 [ # # ]: 0 : aStr.SetChar(1, hex[(aColor.GetRed() >> 4) & 0xf] );
2770 [ # # ]: 0 : aStr.SetChar(2, hex[aColor.GetRed() & 0xf] );
2771 [ # # ]: 0 : aStr.SetChar(3, hex[(aColor.GetGreen() >> 4) & 0xf] );
2772 [ # # ]: 0 : aStr.SetChar(4, hex[aColor.GetGreen() & 0xf] );
2773 [ # # ]: 0 : aStr.SetChar(5, hex[(aColor.GetBlue() >> 4) & 0xf] );
2774 [ # # ]: 0 : aStr.SetChar(6, hex[aColor.GetBlue() & 0xf] );
2775 : :
2776 : 0 : return aStr;
2777 : : }
2778 : :
2779 : : // =====================================================================
2780 : : // Area fuer Kreis erzeugen; es werden Pixelkoordinaten erwartet
2781 : : // =====================================================================
2782 : 0 : String HtmlExport::CreateHTMLCircleArea( sal_uLong nRadius,
2783 : : sal_uLong nCenterX,
2784 : : sal_uLong nCenterY,
2785 : : const String& rHRef ) const
2786 : : {
2787 : 0 : String aStr( RTL_CONSTASCII_USTRINGPARAM("<area shape=\"circle\" alt=\"\" coords=\"" ));
2788 : :
2789 [ # # ][ # # ]: 0 : aStr += String::CreateFromInt32(nCenterX);
[ # # ]
2790 [ # # ]: 0 : aStr.Append(sal_Unicode(','));
2791 [ # # ][ # # ]: 0 : aStr += String::CreateFromInt32(nCenterY);
[ # # ]
2792 [ # # ]: 0 : aStr.Append(sal_Unicode(','));
2793 [ # # ][ # # ]: 0 : aStr += String::CreateFromInt32(nRadius);
[ # # ]
2794 [ # # ]: 0 : aStr.AppendAscii( "\" href=\"" );
2795 [ # # ][ # # ]: 0 : aStr += StringToURL(rHRef);
[ # # ]
2796 [ # # ]: 0 : aStr.AppendAscii( "\">\n" );
2797 : :
2798 : 0 : return aStr;
2799 : : }
2800 : :
2801 : :
2802 : : // =====================================================================
2803 : : // Area fuer Polygon erzeugen; es werden Pixelkoordinaten erwartet
2804 : : // =====================================================================
2805 : 0 : String HtmlExport::CreateHTMLPolygonArea( const ::basegfx::B2DPolyPolygon& rPolyPolygon,
2806 : : Size aShift, double fFactor, const String& rHRef ) const
2807 : : {
2808 : 0 : String aStr;
2809 [ # # ]: 0 : const sal_uInt32 nNoOfPolygons(rPolyPolygon.count());
2810 : :
2811 [ # # ]: 0 : for ( sal_uInt32 nXPoly = 0L; nXPoly < nNoOfPolygons; nXPoly++ )
2812 : : {
2813 [ # # ]: 0 : const ::basegfx::B2DPolygon& aPolygon = rPolyPolygon.getB2DPolygon(nXPoly);
2814 [ # # ]: 0 : const sal_uInt32 nNoOfPoints(aPolygon.count());
2815 : :
2816 [ # # ]: 0 : aStr.AppendAscii( "<area shape=\"polygon\" alt=\"\" coords=\"" );
2817 : :
2818 [ # # ]: 0 : for ( sal_uInt32 nPoint = 0L; nPoint < nNoOfPoints; nPoint++ )
2819 : : {
2820 [ # # ]: 0 : const ::basegfx::B2DPoint aB2DPoint(aPolygon.getB2DPoint(nPoint));
2821 : 0 : Point aPnt(FRound(aB2DPoint.getX()), FRound(aB2DPoint.getY()));
2822 : : // das Koordinaten beziehen sich auf den
2823 : : // physikalischen Seitenursprung, nicht auf den
2824 : : // Koordinatenursprung
2825 : 0 : aPnt.Move(aShift.Width(), aShift.Height());
2826 : :
2827 : 0 : aPnt.X() = (long)(aPnt.X() * fFactor);
2828 : 0 : aPnt.Y() = (long)(aPnt.Y() * fFactor);
2829 [ # # ][ # # ]: 0 : aStr += String::CreateFromInt32(aPnt.X());
[ # # ]
2830 [ # # ]: 0 : aStr.Append(sal_Unicode(','));
2831 [ # # ][ # # ]: 0 : aStr += String::CreateFromInt32(aPnt.Y());
[ # # ]
2832 : :
2833 [ # # ]: 0 : if (nPoint < nNoOfPoints - 1)
2834 [ # # ]: 0 : aStr.Append( sal_Unicode(',') );
2835 : 0 : }
2836 [ # # ]: 0 : aStr.AppendAscii( "\" href=\"" );
2837 [ # # ][ # # ]: 0 : aStr += StringToURL(rHRef);
[ # # ]
2838 [ # # ]: 0 : aStr.AppendAscii( "\">\n" );
2839 [ # # ]: 0 : }
2840 : :
2841 : 0 : return aStr;
2842 : : }
2843 : :
2844 : : // =====================================================================
2845 : : // Area fuer Rechteck erzeugen; es werden Pixelkoordinaten erwartet
2846 : : // =====================================================================
2847 : 0 : String HtmlExport::CreateHTMLRectArea( const Rectangle& rRect,
2848 : : const String& rHRef ) const
2849 : : {
2850 : 0 : String aStr( RTL_CONSTASCII_USTRINGPARAM("<area shape=\"rect\" alt=\"\" coords=\"") );
2851 : :
2852 [ # # ][ # # ]: 0 : aStr += String::CreateFromInt32(rRect.Left());
[ # # ]
2853 [ # # ]: 0 : aStr.Append(sal_Unicode(','));
2854 [ # # ][ # # ]: 0 : aStr += String::CreateFromInt32(rRect.Top());
[ # # ]
2855 [ # # ]: 0 : aStr.Append(sal_Unicode(','));
2856 [ # # ][ # # ]: 0 : aStr += String::CreateFromInt32(rRect.Right());
[ # # ]
2857 [ # # ]: 0 : aStr.Append(sal_Unicode(','));
2858 [ # # ][ # # ]: 0 : aStr += String::CreateFromInt32(rRect.Bottom());
[ # # ]
2859 [ # # ]: 0 : aStr.AppendAscii( "\" href=\"" );
2860 [ # # ][ # # ]: 0 : aStr += StringToURL(rHRef);
[ # # ]
2861 [ # # ]: 0 : aStr.AppendAscii( "\">\n" );
2862 : :
2863 : 0 : return aStr;
2864 : : }
2865 : :
2866 : : // =====================================================================
2867 : : // StringToHTMLString, konvertiert einen String in
2868 : : // seine HTML-Repraesentation (Umlaute etc.)
2869 : : // =====================================================================
2870 : 0 : String HtmlExport::StringToHTMLString( const String& rString )
2871 : : {
2872 [ # # ]: 0 : SvMemoryStream aMemStm;
2873 [ # # ]: 0 : HTMLOutFuncs::Out_String( aMemStm, rString, RTL_TEXTENCODING_UTF8 );
2874 [ # # ]: 0 : aMemStm << (char) 0;
2875 [ # # ][ # # ]: 0 : return String( (char*)aMemStm.GetData(), RTL_TEXTENCODING_UTF8 );
[ # # ]
2876 : : }
2877 : :
2878 : : // =====================================================================
2879 : : // Erzeugt die URL einer bestimmten Seite
2880 : : // =====================================================================
2881 : 0 : String HtmlExport::CreatePageURL( sal_uInt16 nPgNum )
2882 : : {
2883 [ # # ]: 0 : if(mbFrames)
2884 : : {
2885 [ # # ]: 0 : String aUrl( RTL_CONSTASCII_USTRINGPARAM("JavaScript:parent.NavigateAbs("));
2886 [ # # ][ # # ]: 0 : aUrl += String::CreateFromInt32(nPgNum);
[ # # ]
2887 [ # # ]: 0 : aUrl.Append(sal_Unicode(')'));
2888 [ # # ][ # # ]: 0 : return aUrl;
2889 : : }
2890 : : else
2891 : 0 : return *mpHTMLFiles[nPgNum];
2892 : : }
2893 : :
2894 : 0 : bool HtmlExport::CopyScript( const String& rPath, const String& rSource, const String& rDest, bool bUnix /* = false */ )
2895 : : {
2896 [ # # ][ # # ]: 0 : INetURLObject aURL( SvtPathOptions().GetConfigPath() );
[ # # ][ # # ]
[ # # ]
2897 [ # # ]: 0 : String aScript;
2898 : :
2899 [ # # ]: 0 : aURL.Append( rtl::OUString("webcast") );
2900 [ # # ][ # # ]: 0 : aURL.Append( rSource );
2901 : :
2902 [ # # ]: 0 : meEC.SetContext( STR_HTMLEXP_ERROR_OPEN_FILE, rSource );
2903 : :
2904 : 0 : sal_uLong nErr = 0;
2905 [ # # ][ # # ]: 0 : SvStream* pIStm = ::utl::UcbStreamHelper::CreateStream( aURL.GetMainURL( INetURLObject::NO_DECODE ), STREAM_READ );
[ # # ][ # # ]
2906 : :
2907 [ # # ]: 0 : if( pIStm )
2908 : : {
2909 : 0 : rtl::OString aLine;
2910 : :
2911 [ # # ][ # # ]: 0 : while( pIStm->ReadLine( aLine ) )
2912 : : {
2913 [ # # ]: 0 : aScript.AppendAscii( aLine.getStr() );
2914 [ # # ]: 0 : if( bUnix )
2915 : : {
2916 [ # # ]: 0 : aScript.AppendAscii( "\n" );
2917 : : }
2918 : : else
2919 : : {
2920 [ # # ]: 0 : aScript.AppendAscii( "\r\n" );
2921 : : }
2922 : : }
2923 : :
2924 : 0 : nErr = pIStm->GetError();
2925 [ # # ][ # # ]: 0 : delete pIStm;
2926 : : }
2927 : :
2928 [ # # ]: 0 : if( nErr != 0 )
2929 : : {
2930 [ # # ]: 0 : ErrorHandler::HandleError( nErr );
2931 : 0 : return (bool) nErr;
2932 : : }
2933 : :
2934 : :
2935 [ # # ][ # # ]: 0 : aScript.SearchAndReplaceAll( String(RTL_CONSTASCII_USTRINGPARAM("$$1")), getDocumentTitle() );
[ # # ][ # # ]
[ # # ]
2936 : :
2937 [ # # ][ # # ]: 0 : const String aSaveStr( RESTOHTML( STR_WEBVIEW_SAVE ));
[ # # ][ # # ]
2938 [ # # ][ # # ]: 0 : aScript.SearchAndReplaceAll( String(RTL_CONSTASCII_USTRINGPARAM("$$2")), aSaveStr );
[ # # ]
2939 : :
2940 [ # # ][ # # ]: 0 : aScript.SearchAndReplaceAll( String(RTL_CONSTASCII_USTRINGPARAM("$$3")), maCGIPath );
[ # # ]
2941 : :
2942 [ # # ][ # # ]: 0 : aScript.SearchAndReplaceAll( String(RTL_CONSTASCII_USTRINGPARAM("$$4")), String::CreateFromInt32(mnWidthPixel) );
[ # # ][ # # ]
[ # # ]
2943 [ # # ][ # # ]: 0 : aScript.SearchAndReplaceAll( String(RTL_CONSTASCII_USTRINGPARAM("$$5")), String::CreateFromInt32(mnHeightPixel) );
[ # # ][ # # ]
[ # # ]
2944 : :
2945 : :
2946 [ # # ]: 0 : String aDest( rPath );
2947 [ # # ]: 0 : aDest += rDest;
2948 : :
2949 [ # # ]: 0 : meEC.SetContext( STR_HTMLEXP_ERROR_CREATE_FILE, rDest );
2950 : : // write script file
2951 : : {
2952 : 0 : EasyFile aFile;
2953 : : SvStream* pStr;
2954 [ # # ]: 0 : nErr = aFile.createStream(aDest, pStr);
2955 [ # # ]: 0 : if(nErr == 0)
2956 : : {
2957 : : rtl::OString aStr(rtl::OUStringToOString(aScript,
2958 [ # # ][ # # ]: 0 : RTL_TEXTENCODING_UTF8));
2959 [ # # ]: 0 : *pStr << aStr.getStr();
2960 : :
2961 [ # # ]: 0 : nErr = aFile.close();
2962 [ # # ]: 0 : }
2963 : : }
2964 : :
2965 [ # # ]: 0 : if (mpProgress)
2966 [ # # ]: 0 : mpProgress->SetState(++mnPagesWritten);
2967 : :
2968 [ # # ]: 0 : if( nErr != 0 )
2969 [ # # ]: 0 : ErrorHandler::HandleError( nErr );
2970 : :
2971 [ # # ][ # # ]: 0 : return nErr == 0;
[ # # ][ # # ]
2972 : : }
2973 : :
2974 : : static const char * ASP_Scripts[] = { "common.inc", "webcast.asp", "show.asp", "savepic.asp", "poll.asp", "editpic.asp" };
2975 : :
2976 : : /** erzeugt und speichert die f�r WebShow ben�tigte ASP Scripte */
2977 : 0 : bool HtmlExport::CreateASPScripts()
2978 : : {
2979 [ # # ]: 0 : for( sal_uInt16 n = 0; n < (sizeof( ASP_Scripts ) / sizeof(char *)); n++ )
2980 : : {
2981 [ # # ]: 0 : String aScript;
2982 : :
2983 [ # # ]: 0 : aScript.AssignAscii( ASP_Scripts[n] );
2984 [ # # ][ # # ]: 0 : if(!CopyScript(maExportPath, aScript, aScript))
2985 : 0 : return false;
2986 [ # # ][ # # ]: 0 : }
2987 : :
2988 [ # # ][ # # ]: 0 : if(!CopyScript(maExportPath, String(RTL_CONSTASCII_USTRINGPARAM("edit.asp")), maIndex ))
2989 : 0 : return false;
2990 : :
2991 : 0 : return true;
2992 : : }
2993 : :
2994 : :
2995 : : static const char *PERL_Scripts[] = { "webcast.pl", "common.pl", "editpic.pl", "poll.pl", "savepic.pl", "show.pl" };
2996 : :
2997 : : /** erzeugt und speichert die f�r WebShow ben�tigte PERL Scripte */
2998 : 0 : bool HtmlExport::CreatePERLScripts()
2999 : : {
3000 [ # # ]: 0 : for( sal_uInt16 n = 0; n < (sizeof( PERL_Scripts ) / sizeof(char *)); n++ )
3001 : : {
3002 [ # # ]: 0 : String aScript;
3003 [ # # ]: 0 : aScript.AssignAscii( PERL_Scripts[n] );
3004 [ # # ][ # # ]: 0 : if(!CopyScript(maExportPath, aScript, aScript, true))
3005 : 0 : return false;
3006 [ # # ][ # # ]: 0 : }
3007 : :
3008 [ # # ][ # # ]: 0 : if(!CopyScript(maExportPath, rtl::OUString("edit.pl"), maIndex, true ))
[ # # ][ # # ]
3009 : 0 : return false;
3010 : :
3011 [ # # ][ # # ]: 0 : if(!CopyScript(maExportPath, rtl::OUString("index.pl"), maIndexUrl, true ))
[ # # ][ # # ]
3012 : 0 : return false;
3013 : :
3014 : 0 : return true;
3015 : : }
3016 : :
3017 : : /** Erzeugt eine Liste mit den Namen der gespeicherten Images */
3018 : 0 : bool HtmlExport::CreateImageFileList()
3019 : : {
3020 [ # # ]: 0 : String aStr;
3021 [ # # ]: 0 : for( sal_uInt16 nSdPage = 0; nSdPage < mnSdPageCount; nSdPage++)
3022 : : {
3023 [ # # ][ # # ]: 0 : aStr += String::CreateFromInt32( nSdPage + 1 );
[ # # ]
3024 [ # # ]: 0 : aStr.Append(sal_Unicode(';'));
3025 [ # # ]: 0 : aStr += maURLPath;
3026 [ # # ]: 0 : aStr += *mpImageFiles[nSdPage];
3027 [ # # ]: 0 : aStr.AppendAscii( "\r\n" );
3028 : : }
3029 : :
3030 [ # # ]: 0 : String aFileName( RTL_CONSTASCII_USTRINGPARAM("picture.txt") );
3031 [ # # ]: 0 : bool bOk = WriteHtml( aFileName, false, aStr );
3032 : :
3033 [ # # ]: 0 : if (mpProgress)
3034 [ # # ]: 0 : mpProgress->SetState(++mnPagesWritten);
3035 : :
3036 [ # # ][ # # ]: 0 : return bOk;
3037 : : }
3038 : :
3039 : : /** Erzeugt das File mit der aktuellen Seitennumer */
3040 : 0 : bool HtmlExport::CreateImageNumberFile()
3041 : : {
3042 [ # # ]: 0 : String aFull( maExportPath );
3043 [ # # ]: 0 : String aFileName( RTL_CONSTASCII_USTRINGPARAM("currpic.txt") );
3044 [ # # ]: 0 : aFull += aFileName;
3045 : :
3046 [ # # ]: 0 : meEC.SetContext( STR_HTMLEXP_ERROR_CREATE_FILE, aFileName );
3047 : 0 : EasyFile aFile;
3048 : : SvStream* pStr;
3049 [ # # ]: 0 : sal_uLong nErr = aFile.createStream(aFull, pStr);
3050 [ # # ]: 0 : if(nErr == 0)
3051 : : {
3052 [ # # ]: 0 : *pStr << (const char *)"1";
3053 [ # # ]: 0 : nErr = aFile.close();
3054 : : }
3055 : :
3056 [ # # ]: 0 : if (mpProgress)
3057 [ # # ]: 0 : mpProgress->SetState(++mnPagesWritten);
3058 : :
3059 [ # # ]: 0 : if( nErr != 0 )
3060 [ # # ]: 0 : ErrorHandler::HandleError( nErr );
3061 : :
3062 [ # # ][ # # ]: 0 : return nErr == 0;
[ # # ]
3063 : : }
3064 : :
3065 : : // =====================================================================
3066 : :
3067 : 0 : String HtmlExport::InsertSound( const String& rSoundFile )
3068 : : {
3069 [ # # ]: 0 : if( rSoundFile.Len() == 0 )
3070 [ # # ]: 0 : return rSoundFile;
3071 : :
3072 [ # # ]: 0 : String aStr( RTL_CONSTASCII_USTRINGPARAM("<embed src=\"") );
3073 [ # # ][ # # ]: 0 : INetURLObject aURL( rSoundFile );
3074 : :
3075 : : DBG_ASSERT( aURL.GetProtocol() != INET_PROT_NOT_VALID, "invalid URL" );
3076 : :
3077 [ # # ][ # # ]: 0 : aStr += String(aURL.getName());
[ # # ][ # # ]
3078 [ # # ]: 0 : aStr.AppendAscii( "\" hidden=\"true\" autostart=\"true\">" );
3079 : :
3080 [ # # ]: 0 : CopyFile( rSoundFile, maExportPath );
3081 : :
3082 [ # # ][ # # ]: 0 : return aStr;
[ # # ]
3083 : : }
3084 : :
3085 : : // =====================================================================
3086 : :
3087 : 0 : bool HtmlExport::CopyFile( const String& rSourceFile, const String& rDestPath )
3088 : : {
3089 [ # # ]: 0 : DirEntry aSourceEntry( rSourceFile );
3090 [ # # ]: 0 : DirEntry aDestEntry( rDestPath );
3091 : :
3092 [ # # ][ # # ]: 0 : meEC.SetContext( STR_HTMLEXP_ERROR_COPY_FILE, aSourceEntry.GetName(), rDestPath );
[ # # ]
3093 [ # # ]: 0 : FSysError nError = aSourceEntry.CopyTo( aDestEntry, FSYS_ACTION_COPYFILE );
3094 : :
3095 [ # # ]: 0 : if( nError != FSYS_ERR_OK )
3096 : : {
3097 [ # # ]: 0 : ErrorHandler::HandleError(nError);
3098 : 0 : return false;
3099 : : }
3100 : : else
3101 : : {
3102 : 0 : return true;
3103 [ # # ][ # # ]: 0 : }
3104 : : }
3105 : :
3106 : : // =====================================================================
3107 : :
3108 : 0 : bool HtmlExport::checkFileExists( Reference< ::com::sun::star::ucb::XSimpleFileAccess2 >& xFileAccess, String const & aFileName )
3109 : : {
3110 : : try
3111 : : {
3112 [ # # ]: 0 : OUString url( maExportPath );
3113 [ # # ]: 0 : url += aFileName;
3114 [ # # ][ # # ]: 0 : return xFileAccess->exists( url );
[ # # ]
3115 : : }
3116 : 0 : catch( com::sun::star::uno::Exception& )
3117 : : {
3118 : : OSL_FAIL((OString("sd::HtmlExport::checkFileExists(), exception caught: ") +
3119 : : rtl::OUStringToOString( comphelper::anyToString( cppu::getCaughtException() ), RTL_TEXTENCODING_UTF8 )).getStr() );
3120 : : }
3121 : :
3122 : 0 : return false;
3123 : : }
3124 : :
3125 : : // ---------------------------------------------------------------------
3126 : :
3127 : 0 : bool HtmlExport::checkForExistingFiles()
3128 : : {
3129 : 0 : bool bFound = false;
3130 : :
3131 : : try
3132 : : {
3133 [ # # ]: 0 : Reference< XComponentContext > xContext( ::comphelper::getProcessComponentContext() );
3134 [ # # ]: 0 : uno::Reference<ucb::XSimpleFileAccess2> xFA(ucb::SimpleFileAccess::create(xContext));
3135 : :
3136 : : sal_uInt16 nSdPage;
3137 [ # # ][ # # ]: 0 : for( nSdPage = 0; !bFound && (nSdPage < mnSdPageCount); nSdPage++)
[ # # ]
3138 : : {
3139 [ # # ][ # # ]: 0 : if( (mpImageFiles[nSdPage] && checkFileExists( xFA, *mpImageFiles[nSdPage] )) ||
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
3140 [ # # ]: 0 : (mpHTMLFiles[nSdPage] && checkFileExists( xFA, *mpHTMLFiles[nSdPage] )) ||
3141 [ # # ]: 0 : (mpThumbnailFiles[nSdPage] && checkFileExists( xFA, *mpThumbnailFiles[nSdPage] )) ||
3142 [ # # ]: 0 : (mpPageNames[nSdPage] && checkFileExists( xFA, *mpPageNames[nSdPage] )) ||
3143 [ # # ]: 0 : (mpTextFiles[nSdPage] && checkFileExists( xFA, *mpTextFiles[nSdPage] )) )
3144 : : {
3145 : 0 : bFound = true;
3146 : : }
3147 : : }
3148 : :
3149 [ # # ][ # # ]: 0 : if( !bFound && mbDownload )
3150 [ # # ]: 0 : bFound = checkFileExists( xFA, maDocFileName );
3151 : :
3152 [ # # ][ # # ]: 0 : if( !bFound && mbFrames )
3153 [ # # ]: 0 : bFound = checkFileExists( xFA, maFramePage );
3154 : :
3155 [ # # ]: 0 : if( bFound )
3156 : : {
3157 [ # # ]: 0 : ResMgr *pResMgr = CREATERESMGR( dbw );
3158 [ # # ]: 0 : if( pResMgr )
3159 : : {
3160 : 0 : ResId aResId( 4077, *pResMgr );
3161 [ # # ]: 0 : String aMsg( aResId );
3162 : :
3163 : 0 : OUString aSystemPath;
3164 [ # # ][ # # ]: 0 : osl::FileBase::getSystemPathFromFileURL( maExportPath, aSystemPath );
3165 [ # # ][ # # ]: 0 : aMsg.SearchAndReplaceAscii( "%FILENAME", aSystemPath );
[ # # ]
3166 [ # # ]: 0 : WarningBox aWarning( 0, WB_YES_NO | WB_DEF_YES, aMsg );
3167 [ # # ][ # # ]: 0 : aWarning.SetImage( WarningBox::GetStandardImage() );
[ # # ]
3168 [ # # ]: 0 : bFound = ( RET_NO == aWarning.Execute() );
3169 : :
3170 [ # # ][ # # ]: 0 : delete pResMgr;
[ # # ][ # # ]
3171 : : }
3172 : : else
3173 : : {
3174 : 0 : bFound = false;
3175 : : }
3176 [ # # ]: 0 : }
3177 : : }
3178 : 0 : catch( Exception& )
3179 : : {
3180 : : OSL_FAIL((OString("sd::HtmlExport::checkForExistingFiles(), exception caught: ") +
3181 : : rtl::OUStringToOString( comphelper::anyToString( cppu::getCaughtException() ), RTL_TEXTENCODING_UTF8 )).getStr() );
3182 : 0 : bFound = false;
3183 : : }
3184 : :
3185 : 0 : return bFound;
3186 : : }
3187 : :
3188 : : // ---------------------------------------------------------------------
3189 : :
3190 : 0 : String HtmlExport::StringToURL( const String& rURL )
3191 : : {
3192 : 0 : return rURL;
3193 : : }
3194 : :
3195 : 0 : String HtmlExport::GetButtonName( int nButton ) const
3196 : : {
3197 : 0 : String aName;
3198 [ # # ]: 0 : aName.AssignAscii( pButtonNames[nButton] );
3199 : 0 : return aName;
3200 : : }
3201 : :
3202 : : // =====================================================================
3203 : 0 : EasyFile::EasyFile()
3204 : : {
3205 : 0 : pMedium = NULL;
3206 : 0 : pOStm = NULL;
3207 : 0 : bOpen = false;
3208 : 0 : }
3209 : :
3210 : : // =====================================================================
3211 : 0 : EasyFile::~EasyFile()
3212 : : {
3213 [ # # ]: 0 : if( bOpen )
3214 : 0 : close();
3215 : 0 : }
3216 : :
3217 : : // =====================================================================
3218 : 0 : sal_uLong EasyFile::createStream( const String& rUrl, SvStream* &rpStr )
3219 : : {
3220 : 0 : sal_uLong nErr = 0;
3221 : :
3222 [ # # ]: 0 : if(bOpen)
3223 [ # # ]: 0 : nErr = close();
3224 : :
3225 [ # # ]: 0 : String aFileName;
3226 : :
3227 [ # # ]: 0 : if( nErr == 0 )
3228 [ # # ]: 0 : nErr = createFileName( rUrl, aFileName );
3229 : :
3230 [ # # ]: 0 : if( nErr == 0 )
3231 : : {
3232 [ # # ]: 0 : pOStm = ::utl::UcbStreamHelper::CreateStream( aFileName, STREAM_WRITE | STREAM_TRUNC );
3233 [ # # ]: 0 : if( pOStm )
3234 : : {
3235 : 0 : bOpen = true;
3236 : 0 : nErr = pOStm->GetError();
3237 : : }
3238 : : else
3239 : : {
3240 : 0 : nErr = ERRCODE_SFX_CANTCREATECONTENT;
3241 : : }
3242 : : }
3243 : :
3244 [ # # ]: 0 : if( nErr != 0 )
3245 : : {
3246 : 0 : bOpen = false;
3247 [ # # ][ # # ]: 0 : delete pMedium;
3248 [ # # ][ # # ]: 0 : delete pOStm;
3249 : 0 : pOStm = NULL;
3250 : : }
3251 : :
3252 : 0 : rpStr = pOStm;
3253 : :
3254 [ # # ]: 0 : return nErr;
3255 : : }
3256 : :
3257 : : // =====================================================================
3258 : 0 : sal_uLong EasyFile::createFileName( const String& rURL, String& rFileName )
3259 : : {
3260 : 0 : sal_uLong nErr = 0;
3261 : :
3262 [ # # ]: 0 : if( bOpen )
3263 : 0 : nErr = close();
3264 : :
3265 [ # # ]: 0 : if( nErr == 0 )
3266 : : {
3267 [ # # ][ # # ]: 0 : INetURLObject aURL( rURL );
3268 : :
3269 [ # # ]: 0 : if( aURL.GetProtocol() == INET_PROT_NOT_VALID )
3270 : : {
3271 : 0 : rtl::OUString aURLStr;
3272 [ # # ][ # # ]: 0 : ::utl::LocalFileHelper::ConvertPhysicalNameToURL( rURL, aURLStr );
3273 [ # # ][ # # ]: 0 : aURL = INetURLObject( aURLStr );
[ # # ]
3274 : : }
3275 : : DBG_ASSERT( aURL.GetProtocol() != INET_PROT_NOT_VALID, "invalid URL" );
3276 [ # # ][ # # ]: 0 : rFileName = aURL.GetMainURL( INetURLObject::NO_DECODE );
[ # # ]
3277 : : }
3278 : :
3279 : 0 : return nErr;
3280 : : }
3281 : :
3282 : : // =====================================================================
3283 : 0 : sal_uLong EasyFile::close()
3284 : : {
3285 : 0 : sal_uLong nErr = 0;
3286 : :
3287 [ # # ]: 0 : delete pOStm;
3288 : 0 : pOStm = NULL;
3289 : :
3290 : 0 : bOpen = false;
3291 : :
3292 [ # # ]: 0 : if( pMedium )
3293 : : {
3294 : : // uebertragen
3295 : 0 : pMedium->Close();
3296 : 0 : pMedium->Commit();
3297 : :
3298 : 0 : nErr = pMedium->GetError();
3299 : :
3300 [ # # ]: 0 : delete pMedium;
3301 : 0 : pMedium = NULL;
3302 : : }
3303 : :
3304 : 0 : return nErr;
3305 : : }
3306 : :
3307 : : // =====================================================================
3308 : : // This class helps reporting errors during file i/o
3309 : : // =====================================================================
3310 : :
3311 : 0 : HtmlErrorContext::HtmlErrorContext(Window *_pWin)
3312 [ # # ][ # # ]: 0 : : ErrorContext(_pWin)
3313 : : {
3314 : 0 : mnResId = 0;
3315 : 0 : }
3316 : :
3317 : : // =====================================================================
3318 : :
3319 : 0 : sal_Bool HtmlErrorContext::GetString( sal_uLong, String& rCtxStr )
3320 : : {
3321 : : DBG_ASSERT( mnResId != 0, "No error context set" );
3322 [ # # ]: 0 : if( mnResId == 0 )
3323 : 0 : return false;
3324 : :
3325 [ # # ][ # # ]: 0 : rCtxStr = String( SdResId( mnResId ) );
[ # # ]
3326 : :
3327 [ # # ][ # # ]: 0 : rCtxStr.SearchAndReplace( rtl::OUString("$(URL1)"), maURL1 );
[ # # ]
3328 [ # # ][ # # ]: 0 : rCtxStr.SearchAndReplace( rtl::OUString("$(URL2)"), maURL2 );
[ # # ]
3329 : :
3330 : 0 : return true;
3331 : : }
3332 : :
3333 : : // =====================================================================
3334 : :
3335 : 0 : void HtmlErrorContext::SetContext( sal_uInt16 nResId, const String& rURL )
3336 : : {
3337 : 0 : mnResId = nResId;
3338 : 0 : maURL1 = rURL;
3339 : 0 : maURL2.Erase();
3340 : 0 : }
3341 : :
3342 : : // =====================================================================
3343 : :
3344 : 0 : void HtmlErrorContext::SetContext( sal_uInt16 nResId, const String& rURL1, const String& rURL2 )
3345 : : {
3346 : 0 : mnResId = nResId;
3347 : 0 : maURL1 = rURL1;
3348 : 0 : maURL2 = rURL2;
3349 : 0 : }
3350 : :
3351 : : // =====================================================================
3352 : :
3353 : :
3354 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|