1*efeef26fSAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*efeef26fSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*efeef26fSAndrew Rist * or more contributor license agreements. See the NOTICE file 5*efeef26fSAndrew Rist * distributed with this work for additional information 6*efeef26fSAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*efeef26fSAndrew Rist * to you under the Apache License, Version 2.0 (the 8*efeef26fSAndrew Rist * "License"); you may not use this file except in compliance 9*efeef26fSAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11*efeef26fSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13*efeef26fSAndrew Rist * Unless required by applicable law or agreed to in writing, 14*efeef26fSAndrew Rist * software distributed under the License is distributed on an 15*efeef26fSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*efeef26fSAndrew Rist * KIND, either express or implied. See the License for the 17*efeef26fSAndrew Rist * specific language governing permissions and limitations 18*efeef26fSAndrew Rist * under the License. 19cdf0e10cSrcweir * 20*efeef26fSAndrew Rist *************************************************************/ 21*efeef26fSAndrew Rist 22*efeef26fSAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_sw.hxx" 26cdf0e10cSrcweir 27cdf0e10cSrcweir #include <hintids.hxx> 28cdf0e10cSrcweir #include <com/sun/star/util/SearchOptions.hpp> 29cdf0e10cSrcweir #include <com/sun/star/util/SearchFlags.hpp> 30cdf0e10cSrcweir #include <com/sun/star/i18n/TransliterationModules.hpp> 31cdf0e10cSrcweir #include <com/sun/star/ui/dialogs/TemplateDescription.hpp> 32cdf0e10cSrcweir #include <unotools/tempfile.hxx> 33cdf0e10cSrcweir #include <tools/urlobj.hxx> 34cdf0e10cSrcweir #include <vcl/print.hxx> 35cdf0e10cSrcweir #include <vcl/msgbox.hxx> 36cdf0e10cSrcweir #include <vcl/wrkwin.hxx> 37cdf0e10cSrcweir #include <vcl/metric.hxx> 38cdf0e10cSrcweir #include <svtools/ctrltool.hxx> 39cdf0e10cSrcweir #include <svl/intitem.hxx> 40cdf0e10cSrcweir #include <svl/stritem.hxx> 41cdf0e10cSrcweir #include <unotools/pathoptions.hxx> 42cdf0e10cSrcweir #include <svl/undo.hxx> 43cdf0e10cSrcweir #include <svtools/txtcmp.hxx> 44cdf0e10cSrcweir #include <svl/eitem.hxx> 45cdf0e10cSrcweir #include <svl/whiter.hxx> 46cdf0e10cSrcweir #include <unotools/saveopt.hxx> 47cdf0e10cSrcweir #include <svtools/transfer.hxx> 48cdf0e10cSrcweir #include <svtools/svtools.hrc> 49cdf0e10cSrcweir #include <svtools/svtdata.hxx> 50cdf0e10cSrcweir #include <svx/svxids.hrc> 51cdf0e10cSrcweir #include <svtools/htmlcfg.hxx> 52cdf0e10cSrcweir #include <sfx2/app.hxx> 53cdf0e10cSrcweir #include <sfx2/objface.hxx> 54cdf0e10cSrcweir #include <sfx2/viewfrm.hxx> 55cdf0e10cSrcweir #include <sfx2/bindings.hxx> 56cdf0e10cSrcweir #include <sfx2/docfilt.hxx> 57cdf0e10cSrcweir #include <sfx2/fcontnr.hxx> 58cdf0e10cSrcweir #include <sfx2/request.hxx> 59cdf0e10cSrcweir #include <sfx2/prnmon.hxx> 60cdf0e10cSrcweir #include <sfx2/docfile.hxx> 61cdf0e10cSrcweir #include <editeng/fhgtitem.hxx> 62cdf0e10cSrcweir #include <svx/srchdlg.hxx> 63cdf0e10cSrcweir #include <svl/srchitem.hxx> 64cdf0e10cSrcweir #include <editeng/fontitem.hxx> 65cdf0e10cSrcweir #include <editeng/flstitem.hxx> 66cdf0e10cSrcweir #include "editeng/unolingu.hxx" 67cdf0e10cSrcweir #include <sfx2/sfxhtml.hxx> 68cdf0e10cSrcweir #include <swtypes.hxx> 69cdf0e10cSrcweir #include <swmodule.hxx> 70cdf0e10cSrcweir #include <docsh.hxx> 71cdf0e10cSrcweir #include <wdocsh.hxx> 72cdf0e10cSrcweir #include <srcview.hxx> 73cdf0e10cSrcweir #include <viewfunc.hxx> 74cdf0e10cSrcweir #include <doc.hxx> 75cdf0e10cSrcweir #include <sfx2/msg.hxx> 76cdf0e10cSrcweir #include <shellio.hxx> 77cdf0e10cSrcweir 78cdf0e10cSrcweir #include <cmdid.h> // FN_ ... 79cdf0e10cSrcweir #include <helpid.h> 80cdf0e10cSrcweir #include <globals.hrc> 81cdf0e10cSrcweir #include <shells.hrc> 82cdf0e10cSrcweir #include <popup.hrc> 83cdf0e10cSrcweir #include <web.hrc> 84cdf0e10cSrcweir #include <view.hrc> 85cdf0e10cSrcweir #include <com/sun/star/ui/dialogs/XFilePicker.hpp> 86cdf0e10cSrcweir #include <com/sun/star/ui/dialogs/XFilterManager.hpp> 87cdf0e10cSrcweir #include <sfx2/filedlghelper.hxx> 88cdf0e10cSrcweir #define SwSrcView 89cdf0e10cSrcweir #include "swslots.hxx" 90cdf0e10cSrcweir 91cdf0e10cSrcweir #include <unomid.h> 92cdf0e10cSrcweir 93cdf0e10cSrcweir #include <com/sun/star/document/XDocumentProperties.hpp> 94cdf0e10cSrcweir #include <com/sun/star/document/XDocumentPropertiesSupplier.hpp> 95cdf0e10cSrcweir 96cdf0e10cSrcweir using namespace ::com::sun::star; 97cdf0e10cSrcweir using namespace ::com::sun::star::i18n; 98cdf0e10cSrcweir using namespace ::com::sun::star::lang; 99cdf0e10cSrcweir using namespace ::com::sun::star::uno; 100cdf0e10cSrcweir using namespace ::com::sun::star::ui::dialogs; 101cdf0e10cSrcweir using namespace ::com::sun::star::i18n; 102cdf0e10cSrcweir using namespace ::com::sun::star::lang; 103cdf0e10cSrcweir using namespace ::sfx2; 104cdf0e10cSrcweir using ::rtl::OUString; 105cdf0e10cSrcweir using ::com::sun::star::util::SearchOptions; 106cdf0e10cSrcweir 107cdf0e10cSrcweir 108cdf0e10cSrcweir #define SWSRCVIEWFLAGS ( SFX_VIEW_CAN_PRINT|\ 109cdf0e10cSrcweir SFX_VIEW_NO_NEWWINDOW ) 110cdf0e10cSrcweir 111cdf0e10cSrcweir #define SRC_SEARCHOPTIONS (0xFFFF & ~(SEARCH_OPTIONS_FORMAT|SEARCH_OPTIONS_FAMILIES|SEARCH_OPTIONS_SEARCH_ALL)) 112cdf0e10cSrcweir 113cdf0e10cSrcweir // Druckraender -> wie Basic - Ide 114cdf0e10cSrcweir #define LMARGPRN 1700 115cdf0e10cSrcweir #define RMARGPRN 900 116cdf0e10cSrcweir #define TMARGPRN 2000 117cdf0e10cSrcweir #define BMARGPRN 1000 118cdf0e10cSrcweir #define BORDERPRN 300 119cdf0e10cSrcweir 120cdf0e10cSrcweir SFX_IMPL_NAMED_VIEWFACTORY(SwSrcView, "SourceView") 121cdf0e10cSrcweir { 122cdf0e10cSrcweir SFX_VIEW_REGISTRATION(SwWebDocShell); 123cdf0e10cSrcweir } 124cdf0e10cSrcweir 125cdf0e10cSrcweir SFX_IMPL_INTERFACE( SwSrcView, SfxViewShell, SW_RES(0) ) 126cdf0e10cSrcweir { 127cdf0e10cSrcweir SFX_POPUPMENU_REGISTRATION(SW_RES(MN_SRCVIEW_POPUPMENU)); 128cdf0e10cSrcweir SFX_OBJECTBAR_REGISTRATION( SFX_OBJECTBAR_TOOLS| 129cdf0e10cSrcweir SFX_VISIBILITY_STANDARD|SFX_VISIBILITY_SERVER, 130cdf0e10cSrcweir SW_RES(RID_WEBTOOLS_TOOLBOX) ); 131cdf0e10cSrcweir SFX_CHILDWINDOW_REGISTRATION(SvxSearchDialogWrapper::GetChildWindowId()); 132cdf0e10cSrcweir } 133cdf0e10cSrcweir 134cdf0e10cSrcweir TYPEINIT1(SwSrcView, SfxViewShell) 135cdf0e10cSrcweir 136cdf0e10cSrcweir /*-----------------18.11.96 08.05------------------- 137cdf0e10cSrcweir 138cdf0e10cSrcweir --------------------------------------------------*/ 139cdf0e10cSrcweir 140cdf0e10cSrcweir 141cdf0e10cSrcweir void lcl_PrintHeader( OutputDevice &rOutDev, sal_uInt16 nPages, sal_uInt16 nCurPage, const String& rTitle ) 142cdf0e10cSrcweir { 143cdf0e10cSrcweir short nLeftMargin = LMARGPRN; 144cdf0e10cSrcweir Size aSz = rOutDev.GetOutputSize(); 145cdf0e10cSrcweir short nBorder = BORDERPRN; 146cdf0e10cSrcweir 147cdf0e10cSrcweir Color aOldFillColor( rOutDev.GetFillColor() ); 148cdf0e10cSrcweir Font aOldFont( rOutDev.GetFont() ); 149cdf0e10cSrcweir 150cdf0e10cSrcweir rOutDev.SetFillColor( Color(COL_TRANSPARENT) ); 151cdf0e10cSrcweir 152cdf0e10cSrcweir Font aFont( aOldFont ); 153cdf0e10cSrcweir aFont.SetWeight( WEIGHT_BOLD ); 154cdf0e10cSrcweir aFont.SetAlign( ALIGN_BOTTOM ); 155cdf0e10cSrcweir rOutDev.SetFont( aFont ); 156cdf0e10cSrcweir 157cdf0e10cSrcweir long nFontHeight = rOutDev.GetTextHeight(); 158cdf0e10cSrcweir 159cdf0e10cSrcweir // 1.Border => Strich, 2+3 Border = Freiraum. 160cdf0e10cSrcweir long nYTop = TMARGPRN-3*nBorder-nFontHeight; 161cdf0e10cSrcweir 162cdf0e10cSrcweir long nXLeft = nLeftMargin-nBorder; 163cdf0e10cSrcweir long nXRight = aSz.Width()-RMARGPRN+nBorder; 164cdf0e10cSrcweir 165cdf0e10cSrcweir rOutDev.DrawRect( Rectangle( 166cdf0e10cSrcweir Point( nXLeft, nYTop ), 167cdf0e10cSrcweir Size( nXRight-nXLeft, aSz.Height() - nYTop - BMARGPRN + nBorder ) ) ); 168cdf0e10cSrcweir 169cdf0e10cSrcweir 170cdf0e10cSrcweir long nY = TMARGPRN-2*nBorder; 171cdf0e10cSrcweir Point aPos( nLeftMargin, nY ); 172cdf0e10cSrcweir rOutDev.DrawText( aPos, rTitle ); 173cdf0e10cSrcweir if ( nPages != 1 ) 174cdf0e10cSrcweir { 175cdf0e10cSrcweir aFont.SetWeight( WEIGHT_NORMAL ); 176cdf0e10cSrcweir rOutDev.SetFont( aFont ); 177cdf0e10cSrcweir String aPageStr( C2S(" [") ); 178cdf0e10cSrcweir aPageStr += String( SW_RES( STR_PAGE ) ); 179cdf0e10cSrcweir aPageStr += ' '; 180cdf0e10cSrcweir aPageStr += String::CreateFromInt32( nCurPage ); 181cdf0e10cSrcweir aPageStr += ']'; 182cdf0e10cSrcweir aPos.X() += rOutDev.GetTextWidth( rTitle ); 183cdf0e10cSrcweir rOutDev.DrawText( aPos, aPageStr ); 184cdf0e10cSrcweir } 185cdf0e10cSrcweir 186cdf0e10cSrcweir 187cdf0e10cSrcweir nY = TMARGPRN-nBorder; 188cdf0e10cSrcweir 189cdf0e10cSrcweir rOutDev.DrawLine( Point( nXLeft, nY ), Point( nXRight, nY ) ); 190cdf0e10cSrcweir 191cdf0e10cSrcweir rOutDev.SetFont( aOldFont ); 192cdf0e10cSrcweir rOutDev.SetFillColor( aOldFillColor ); 193cdf0e10cSrcweir } 194cdf0e10cSrcweir /* -----------------13.11.2003 16:24----------------- 195cdf0e10cSrcweir 196cdf0e10cSrcweir --------------------------------------------------*/ 197cdf0e10cSrcweir rtl_TextEncoding lcl_GetStreamCharSet(rtl_TextEncoding eLoadEncoding) 198cdf0e10cSrcweir { 199cdf0e10cSrcweir rtl_TextEncoding eRet = eLoadEncoding; 200cdf0e10cSrcweir if(RTL_TEXTENCODING_DONTKNOW == eRet) 201cdf0e10cSrcweir { 202cdf0e10cSrcweir SvxHtmlOptions* pHtmlOptions = SvxHtmlOptions::Get(); 203cdf0e10cSrcweir const sal_Char *pCharSet = 204cdf0e10cSrcweir rtl_getBestMimeCharsetFromTextEncoding( pHtmlOptions->GetTextEncoding() ); 205cdf0e10cSrcweir eRet = rtl_getTextEncodingFromMimeCharset( pCharSet ); 206cdf0e10cSrcweir } 207cdf0e10cSrcweir return eRet; 208cdf0e10cSrcweir } 209cdf0e10cSrcweir /*-----------------18.11.96 08.21------------------- 210cdf0e10cSrcweir 211cdf0e10cSrcweir --------------------------------------------------*/ 212cdf0e10cSrcweir 213cdf0e10cSrcweir void lcl_ConvertTabsToSpaces( String& rLine ) 214cdf0e10cSrcweir { 215cdf0e10cSrcweir if ( rLine.Len() ) 216cdf0e10cSrcweir { 217cdf0e10cSrcweir sal_uInt16 nPos = 0; 218cdf0e10cSrcweir sal_uInt16 nMax = rLine.Len(); 219cdf0e10cSrcweir while ( nPos < nMax ) 220cdf0e10cSrcweir { 221cdf0e10cSrcweir if ( rLine.GetChar(nPos) == '\t' ) 222cdf0e10cSrcweir { 223cdf0e10cSrcweir // Nicht 4 Blanks, sondern an 4er TabPos: 224cdf0e10cSrcweir String aBlanker; 225cdf0e10cSrcweir aBlanker.Fill( ( 4 - ( nPos % 4 ) ), ' ' ); 226cdf0e10cSrcweir rLine.Erase( nPos, 1 ); 227cdf0e10cSrcweir rLine.Insert( aBlanker, nPos ); 228cdf0e10cSrcweir nMax = rLine.Len(); 229cdf0e10cSrcweir } 230cdf0e10cSrcweir nPos++; // Nicht optimal, falls Tab, aber auch nicht verkehrt... 231cdf0e10cSrcweir } 232cdf0e10cSrcweir } 233cdf0e10cSrcweir } 234cdf0e10cSrcweir 235cdf0e10cSrcweir /*-------------------------------------------------------------------- 236cdf0e10cSrcweir Beschreibung: 237cdf0e10cSrcweir --------------------------------------------------------------------*/ 238cdf0e10cSrcweir 239cdf0e10cSrcweir 240cdf0e10cSrcweir SwSrcView::SwSrcView(SfxViewFrame* pViewFrame, SfxViewShell*) : 241cdf0e10cSrcweir SfxViewShell( pViewFrame, SWSRCVIEWFLAGS ), 242cdf0e10cSrcweir aEditWin( &pViewFrame->GetWindow(), this ), 243cdf0e10cSrcweir pSearchItem(0), 244cdf0e10cSrcweir bSourceSaved(sal_False), 245cdf0e10cSrcweir eLoadEncoding(RTL_TEXTENCODING_DONTKNOW) 246cdf0e10cSrcweir { 247cdf0e10cSrcweir Init(); 248cdf0e10cSrcweir } 249cdf0e10cSrcweir 250cdf0e10cSrcweir /*-------------------------------------------------------------------- 251cdf0e10cSrcweir Beschreibung: 252cdf0e10cSrcweir --------------------------------------------------------------------*/ 253cdf0e10cSrcweir 254cdf0e10cSrcweir 255cdf0e10cSrcweir SwSrcView::~SwSrcView() 256cdf0e10cSrcweir { 257cdf0e10cSrcweir SwDocShell* pDocShell = GetDocShell(); 258cdf0e10cSrcweir DBG_ASSERT(PTR_CAST(SwWebDocShell, pDocShell), "Wieso keine WebDocShell?"); 259cdf0e10cSrcweir const TextSelection& rSel = aEditWin.GetTextView()->GetSelection(); 260cdf0e10cSrcweir ((SwWebDocShell*)pDocShell)->SetSourcePara( static_cast< sal_uInt16 >( rSel.GetStart().GetPara() ) ); 261cdf0e10cSrcweir 262cdf0e10cSrcweir uno::Reference<document::XDocumentPropertiesSupplier> xDPS( 263cdf0e10cSrcweir pDocShell->GetModel(), uno::UNO_QUERY_THROW); 264cdf0e10cSrcweir uno::Reference<document::XDocumentProperties> xDocProps 265cdf0e10cSrcweir = xDPS->getDocumentProperties(); 266cdf0e10cSrcweir ::rtl::OUString url = xDocProps->getAutoloadURL(); 267cdf0e10cSrcweir sal_Int32 delay = xDocProps->getAutoloadSecs(); 268cdf0e10cSrcweir pDocShell->SetAutoLoad(INetURLObject(url), delay, 269cdf0e10cSrcweir (delay != 0) || !url.equalsAscii("")); 270cdf0e10cSrcweir // EndListening(*GetViewFrame()); 271cdf0e10cSrcweir EndListening(*pDocShell); 272cdf0e10cSrcweir delete pSearchItem; 273cdf0e10cSrcweir } 274cdf0e10cSrcweir 275cdf0e10cSrcweir /*-----------------24.04.97 10:37------------------- 276cdf0e10cSrcweir 277cdf0e10cSrcweir --------------------------------------------------*/ 278cdf0e10cSrcweir void SwSrcView::SaveContentTo(SfxMedium& rMed) 279cdf0e10cSrcweir { 280cdf0e10cSrcweir SvStream* pOutStream = rMed.GetOutStream(); 281cdf0e10cSrcweir pOutStream->SetStreamCharSet(lcl_GetStreamCharSet(eLoadEncoding)); 282cdf0e10cSrcweir aEditWin.Write( *pOutStream );//, EE_FORMAT_TEXT); 283cdf0e10cSrcweir } 284cdf0e10cSrcweir 285cdf0e10cSrcweir /*-------------------------------------------------------------------- 286cdf0e10cSrcweir Beschreibung: 287cdf0e10cSrcweir --------------------------------------------------------------------*/ 288cdf0e10cSrcweir 289cdf0e10cSrcweir 290cdf0e10cSrcweir void SwSrcView::Init() 291cdf0e10cSrcweir { 292cdf0e10cSrcweir SetHelpId(SW_SRC_VIEWSHELL); 293cdf0e10cSrcweir SetName(C2S("Source")); 294cdf0e10cSrcweir SetWindow( &aEditWin ); 295cdf0e10cSrcweir SwDocShell* pDocShell = GetDocShell(); 296cdf0e10cSrcweir // wird das Doc noch geladen, dann muss die DocShell das Load 297cdf0e10cSrcweir // anwerfen, wenn das Laden abgeschlossen ist 298cdf0e10cSrcweir if(!pDocShell->IsLoading()) 299cdf0e10cSrcweir Load(pDocShell); 300cdf0e10cSrcweir else 301cdf0e10cSrcweir { 302cdf0e10cSrcweir aEditWin.SetReadonly(sal_True); 303cdf0e10cSrcweir } 304cdf0e10cSrcweir 305cdf0e10cSrcweir SetNewWindowAllowed( sal_False ); 306cdf0e10cSrcweir StartListening(*pDocShell,sal_True); 307cdf0e10cSrcweir } 308cdf0e10cSrcweir 309cdf0e10cSrcweir /*-------------------------------------------------------------------- 310cdf0e10cSrcweir Beschreibung: 311cdf0e10cSrcweir --------------------------------------------------------------------*/ 312cdf0e10cSrcweir 313cdf0e10cSrcweir SwDocShell* SwSrcView::GetDocShell() 314cdf0e10cSrcweir { 315cdf0e10cSrcweir SfxObjectShell* pObjShell = GetViewFrame()->GetObjectShell(); 316cdf0e10cSrcweir return PTR_CAST(SwDocShell, pObjShell); 317cdf0e10cSrcweir } 318cdf0e10cSrcweir 319cdf0e10cSrcweir /*-------------------------------------------------------------------- 320cdf0e10cSrcweir Beschreibung: 321cdf0e10cSrcweir --------------------------------------------------------------------*/ 322cdf0e10cSrcweir 323cdf0e10cSrcweir 324cdf0e10cSrcweir void SwSrcView::SaveContent(const String& rTmpFile) 325cdf0e10cSrcweir { 326cdf0e10cSrcweir SfxMedium aMedium( rTmpFile, STREAM_WRITE, sal_True); 327cdf0e10cSrcweir SvStream* pOutStream = aMedium.GetOutStream(); 328cdf0e10cSrcweir pOutStream->SetStreamCharSet( lcl_GetStreamCharSet(eLoadEncoding) ); 329cdf0e10cSrcweir aEditWin.Write(*pOutStream);//, EE_FORMAT_TEXT); 330cdf0e10cSrcweir aMedium.Commit(); 331cdf0e10cSrcweir } 332cdf0e10cSrcweir 333cdf0e10cSrcweir /*-------------------------------------------------------------------- 334cdf0e10cSrcweir Beschreibung: 335cdf0e10cSrcweir --------------------------------------------------------------------*/ 336cdf0e10cSrcweir 337cdf0e10cSrcweir 338cdf0e10cSrcweir void SwSrcView::Execute(SfxRequest& rReq) 339cdf0e10cSrcweir { 340cdf0e10cSrcweir sal_uInt16 nSlot = rReq.GetSlot(); 341cdf0e10cSrcweir TextView* pTextView = aEditWin.GetTextView(); 342cdf0e10cSrcweir switch( nSlot ) 343cdf0e10cSrcweir { 344cdf0e10cSrcweir case SID_SAVEASDOC: 345cdf0e10cSrcweir { 346cdf0e10cSrcweir SvtPathOptions aPathOpt; 347cdf0e10cSrcweir // filesave dialog with autoextension 348cdf0e10cSrcweir FileDialogHelper aDlgHelper( 349cdf0e10cSrcweir TemplateDescription::FILESAVE_AUTOEXTENSION, 350cdf0e10cSrcweir TemplateDescription::FILESAVE_SIMPLE ); 351cdf0e10cSrcweir uno::Reference < XFilePicker > xFP = aDlgHelper.GetFilePicker(); 352cdf0e10cSrcweir // pFileDlg->SetHelpId(HID_FILEDLG_SRCVIEW); 353cdf0e10cSrcweir uno::Reference<XFilterManager> xFltMgr(xFP, UNO_QUERY); 354cdf0e10cSrcweir 355cdf0e10cSrcweir // search for an html filter for export 356cdf0e10cSrcweir SfxFilterContainer* pFilterCont = GetObjectShell()->GetFactory().GetFilterContainer(); 357cdf0e10cSrcweir const SfxFilter* pFilter = 358cdf0e10cSrcweir pFilterCont->GetFilter4Extension( C2S("html"), SFX_FILTER_EXPORT ); 359cdf0e10cSrcweir if ( pFilter ) 360cdf0e10cSrcweir { 361cdf0e10cSrcweir // filter found -> use its uiname and wildcard 362cdf0e10cSrcweir const String& rUIName = pFilter->GetUIName(); 363cdf0e10cSrcweir const WildCard& rCard = pFilter->GetWildcard(); 364cdf0e10cSrcweir xFltMgr->appendFilter( rUIName, rCard() ); 365cdf0e10cSrcweir xFltMgr->setCurrentFilter( rUIName ) ; 366cdf0e10cSrcweir } 367cdf0e10cSrcweir else 368cdf0e10cSrcweir { 369cdf0e10cSrcweir // filter not found 370cdf0e10cSrcweir String sHtml(C2S("HTML")); 371cdf0e10cSrcweir xFltMgr->appendFilter( sHtml, C2S("*.html;*.htm") ); 372cdf0e10cSrcweir xFltMgr->setCurrentFilter( sHtml ) ; 373cdf0e10cSrcweir } 374cdf0e10cSrcweir 375cdf0e10cSrcweir xFP->setDisplayDirectory( aPathOpt.GetWorkPath() ); 376cdf0e10cSrcweir if( aDlgHelper.Execute() == ERRCODE_NONE) 377cdf0e10cSrcweir { 378cdf0e10cSrcweir SfxMedium aMedium( xFP->getFiles().getConstArray()[0], 379cdf0e10cSrcweir STREAM_WRITE | STREAM_SHARE_DENYNONE, 380cdf0e10cSrcweir sal_False ); 381cdf0e10cSrcweir SvStream* pOutStream = aMedium.GetOutStream(); 382cdf0e10cSrcweir pOutStream->SetStreamCharSet(lcl_GetStreamCharSet(eLoadEncoding)); 383cdf0e10cSrcweir aEditWin.Write( *pOutStream ); 384cdf0e10cSrcweir aMedium.Commit(); 385cdf0e10cSrcweir } 386cdf0e10cSrcweir } 387cdf0e10cSrcweir break; 388cdf0e10cSrcweir case SID_SAVEDOC: 389cdf0e10cSrcweir { 390cdf0e10cSrcweir SwDocShell* pDocShell = GetDocShell(); 391cdf0e10cSrcweir SfxMedium* pMed = 0; 392cdf0e10cSrcweir if(pDocShell->HasName()) 393cdf0e10cSrcweir pMed = pDocShell->GetMedium(); 394cdf0e10cSrcweir else 395cdf0e10cSrcweir { 396cdf0e10cSrcweir SfxBoolItem* pItem = (SfxBoolItem*)pDocShell->ExecuteSlot(rReq, pDocShell->GetInterface()); 397cdf0e10cSrcweir if(pItem && pItem->GetValue()) 398cdf0e10cSrcweir pMed = pDocShell->GetMedium(); 399cdf0e10cSrcweir } 400cdf0e10cSrcweir if(pMed) 401cdf0e10cSrcweir { 402cdf0e10cSrcweir SvStream* pOutStream = pMed->GetOutStream(); 403cdf0e10cSrcweir pOutStream->Seek(0); 404cdf0e10cSrcweir pOutStream->SetStreamSize(0); 405cdf0e10cSrcweir pOutStream->SetStreamCharSet(lcl_GetStreamCharSet(eLoadEncoding)); 406cdf0e10cSrcweir aEditWin.Write( *pOutStream ); 407cdf0e10cSrcweir pMed->CloseOutStream(); 408cdf0e10cSrcweir pMed->Commit(); 409cdf0e10cSrcweir pDocShell->GetDoc()->ResetModified(); 410cdf0e10cSrcweir SourceSaved(); 411cdf0e10cSrcweir aEditWin.ClearModifyFlag(); 412cdf0e10cSrcweir } 413cdf0e10cSrcweir } 414cdf0e10cSrcweir break; 415cdf0e10cSrcweir case FID_SEARCH_NOW: 416cdf0e10cSrcweir { 417cdf0e10cSrcweir const SfxItemSet* pTmpArgs = rReq.GetArgs(); 418cdf0e10cSrcweir 419cdf0e10cSrcweir sal_uInt16 nWhich = pTmpArgs->GetWhichByPos( 0 ); 420cdf0e10cSrcweir DBG_ASSERT( nWhich, "Wich fuer SearchItem ?" ); 421cdf0e10cSrcweir const SfxPoolItem& rItem = pTmpArgs->Get( nWhich ); 422cdf0e10cSrcweir SetSearchItem( (const SvxSearchItem&)rItem); 423cdf0e10cSrcweir StartSearchAndReplace( (const SvxSearchItem&)rItem, sal_False, rReq.IsAPI() ); 424cdf0e10cSrcweir if(aEditWin.IsModified()) 425cdf0e10cSrcweir GetDocShell()->GetDoc()->SetModified(); 426cdf0e10cSrcweir } 427cdf0e10cSrcweir break; 428cdf0e10cSrcweir case FN_REPEAT_SEARCH: 429cdf0e10cSrcweir { 430cdf0e10cSrcweir SvxSearchItem* pSrchItem = GetSearchItem(); 431cdf0e10cSrcweir if(pSrchItem) 432cdf0e10cSrcweir { 433cdf0e10cSrcweir StartSearchAndReplace( *pSrchItem, sal_False, rReq.IsAPI() ); 434cdf0e10cSrcweir if(aEditWin.IsModified()) 435cdf0e10cSrcweir GetDocShell()->GetDoc()->SetModified(); 436cdf0e10cSrcweir } 437cdf0e10cSrcweir } 438cdf0e10cSrcweir break; 439cdf0e10cSrcweir case SID_PRINTDOC: 440cdf0e10cSrcweir case SID_PRINTDOCDIRECT: 441cdf0e10cSrcweir { 442cdf0e10cSrcweir SfxViewShell::ExecuteSlot( rReq, SfxViewShell::GetInterface() ); 443cdf0e10cSrcweir } 444cdf0e10cSrcweir break; 445cdf0e10cSrcweir case SID_UNDO: 446cdf0e10cSrcweir pTextView->Undo(); 447cdf0e10cSrcweir GetViewFrame()->GetBindings().InvalidateAll(sal_False); 448cdf0e10cSrcweir break; 449cdf0e10cSrcweir case SID_REDO: 450cdf0e10cSrcweir pTextView->Redo(); 451cdf0e10cSrcweir GetViewFrame()->GetBindings().InvalidateAll(sal_False); 452cdf0e10cSrcweir break; 453cdf0e10cSrcweir case SID_REPEAT: 454cdf0e10cSrcweir break; 455cdf0e10cSrcweir case SID_CUT: 456cdf0e10cSrcweir if(pTextView->HasSelection()) 457cdf0e10cSrcweir pTextView->Cut(); 458cdf0e10cSrcweir break; 459cdf0e10cSrcweir case SID_COPY: 460cdf0e10cSrcweir if(pTextView->HasSelection()) 461cdf0e10cSrcweir pTextView->Copy(); 462cdf0e10cSrcweir break; 463cdf0e10cSrcweir case SID_PASTE: 464cdf0e10cSrcweir pTextView->Paste(); 465cdf0e10cSrcweir break; 466cdf0e10cSrcweir case SID_SELECTALL: 467cdf0e10cSrcweir pTextView->SetSelection( TextSelection( TextPaM( 0, 0 ), TextPaM( 0xFFFFFFFF, 0xFFFF ) ) ); 468cdf0e10cSrcweir break; 469cdf0e10cSrcweir } 470cdf0e10cSrcweir aEditWin.Invalidate(); 471cdf0e10cSrcweir } 472cdf0e10cSrcweir 473cdf0e10cSrcweir /*-------------------------------------------------------------------- 474cdf0e10cSrcweir Beschreibung: 475cdf0e10cSrcweir --------------------------------------------------------------------*/ 476cdf0e10cSrcweir 477cdf0e10cSrcweir 478cdf0e10cSrcweir void SwSrcView::GetState(SfxItemSet& rSet) 479cdf0e10cSrcweir { 480cdf0e10cSrcweir SfxWhichIter aIter(rSet); 481cdf0e10cSrcweir sal_uInt16 nWhich = aIter.FirstWhich(); 482cdf0e10cSrcweir TextView* pTextView = aEditWin.GetTextView(); 483cdf0e10cSrcweir 484cdf0e10cSrcweir while(nWhich) 485cdf0e10cSrcweir { 486cdf0e10cSrcweir switch(nWhich) 487cdf0e10cSrcweir { 488cdf0e10cSrcweir case SID_SAVEASDOC: 489cdf0e10cSrcweir rSet.Put(SfxStringItem(nWhich, String(SW_RES(STR_SAVEAS_SRC)))); 490cdf0e10cSrcweir break; 491cdf0e10cSrcweir case SID_SAVEDOC: 492cdf0e10cSrcweir { 493cdf0e10cSrcweir SwDocShell* pDocShell = GetDocShell(); 494cdf0e10cSrcweir if(!pDocShell->IsModified()) 495cdf0e10cSrcweir rSet.DisableItem(nWhich); 496cdf0e10cSrcweir } 497cdf0e10cSrcweir break; 498cdf0e10cSrcweir case SID_PRINTDOC: 499cdf0e10cSrcweir case SID_PRINTDOCDIRECT: 500cdf0e10cSrcweir break; 501cdf0e10cSrcweir case SID_TABLE_CELL: 502cdf0e10cSrcweir { 503cdf0e10cSrcweir String aPos( SW_RES(STR_SRCVIEW_ROW) ); 504cdf0e10cSrcweir TextSelection aSel = pTextView->GetSelection(); 505cdf0e10cSrcweir aPos += String::CreateFromInt32( aSel.GetEnd().GetPara()+1 ); 506cdf0e10cSrcweir aPos +=C2S(" : "); 507cdf0e10cSrcweir aPos += String(SW_RES(STR_SRCVIEW_COL)); 508cdf0e10cSrcweir aPos += String::CreateFromInt32( aSel.GetEnd().GetIndex()+1 ); 509cdf0e10cSrcweir SfxStringItem aItem( nWhich, aPos ); 510cdf0e10cSrcweir rSet.Put( aItem ); 511cdf0e10cSrcweir } 512cdf0e10cSrcweir break; 513cdf0e10cSrcweir case SID_SEARCH_OPTIONS: 514cdf0e10cSrcweir { 515cdf0e10cSrcweir sal_uInt16 nOpt = SRC_SEARCHOPTIONS; 516cdf0e10cSrcweir if(GetDocShell()->IsReadOnly()) 517cdf0e10cSrcweir nOpt &= ~(SEARCH_OPTIONS_REPLACE|SEARCH_OPTIONS_REPLACE_ALL); 518cdf0e10cSrcweir 519cdf0e10cSrcweir rSet.Put( SfxUInt16Item( SID_SEARCH_OPTIONS, nOpt) ); 520cdf0e10cSrcweir } 521cdf0e10cSrcweir break; 522cdf0e10cSrcweir case SID_SEARCH_ITEM: 523cdf0e10cSrcweir { 524cdf0e10cSrcweir String sSelected; 525cdf0e10cSrcweir if ( !pTextView->HasSelection() ) 526cdf0e10cSrcweir { 527cdf0e10cSrcweir const TextSelection& rSel = pTextView->GetSelection(); 528cdf0e10cSrcweir sSelected = aEditWin.GetTextEngine()->GetWord( rSel.GetStart()); 529cdf0e10cSrcweir } 530cdf0e10cSrcweir else 531cdf0e10cSrcweir { 532cdf0e10cSrcweir sSelected = pTextView->GetSelected(); 533cdf0e10cSrcweir } 534cdf0e10cSrcweir SvxSearchItem * pSrchItem = GetSearchItem(); 535cdf0e10cSrcweir pSrchItem->SetSearchString( sSelected ); 536cdf0e10cSrcweir rSet.Put( *pSrchItem ); 537cdf0e10cSrcweir } 538cdf0e10cSrcweir break; 539cdf0e10cSrcweir case FN_REPEAT_SEARCH: 540cdf0e10cSrcweir { 541cdf0e10cSrcweir if(!GetSearchItem()) 542cdf0e10cSrcweir rSet.DisableItem(nWhich); 543cdf0e10cSrcweir }; 544cdf0e10cSrcweir break; 545cdf0e10cSrcweir case SID_UNDO: 546cdf0e10cSrcweir case SID_REDO: 547cdf0e10cSrcweir { 548cdf0e10cSrcweir ::svl::IUndoManager& rMgr = pTextView->GetTextEngine()->GetUndoManager(); 549cdf0e10cSrcweir sal_uInt16 nCount = 0; 550cdf0e10cSrcweir if(nWhich == SID_UNDO) 551cdf0e10cSrcweir { 552cdf0e10cSrcweir nCount = rMgr.GetUndoActionCount(); 553cdf0e10cSrcweir if(nCount) 554cdf0e10cSrcweir { 555cdf0e10cSrcweir String aStr(SvtResId( STR_UNDO));; 556cdf0e10cSrcweir aStr += rMgr.GetUndoActionComment(--nCount); 557cdf0e10cSrcweir rSet.Put(SfxStringItem(nWhich, aStr)); 558cdf0e10cSrcweir } 559cdf0e10cSrcweir else 560cdf0e10cSrcweir rSet.DisableItem(nWhich); 561cdf0e10cSrcweir } 562cdf0e10cSrcweir else 563cdf0e10cSrcweir { 564cdf0e10cSrcweir nCount = rMgr.GetRedoActionCount(); 565cdf0e10cSrcweir if(nCount) 566cdf0e10cSrcweir { 567cdf0e10cSrcweir String aStr(SvtResId( STR_REDO));; 568cdf0e10cSrcweir aStr += rMgr.GetRedoActionComment(--nCount); 569cdf0e10cSrcweir rSet.Put(SfxStringItem(nWhich,aStr)); 570cdf0e10cSrcweir } 571cdf0e10cSrcweir else 572cdf0e10cSrcweir rSet.DisableItem(nWhich); 573cdf0e10cSrcweir } 574cdf0e10cSrcweir } 575cdf0e10cSrcweir break; 576cdf0e10cSrcweir case SID_MAIL_SENDDOCASPDF: 577cdf0e10cSrcweir case SID_MAIL_SENDDOC : 578cdf0e10cSrcweir case SID_EXPORTDOCASPDF: 579cdf0e10cSrcweir case SID_DIRECTEXPORTDOCASPDF: 580cdf0e10cSrcweir case SID_EXPORTDOC: 581cdf0e10cSrcweir case SID_REPEAT: 582cdf0e10cSrcweir case SID_BROWSER_MODE: 583cdf0e10cSrcweir case FN_PRINT_LAYOUT: 584cdf0e10cSrcweir rSet.DisableItem(nWhich); 585cdf0e10cSrcweir break; 586cdf0e10cSrcweir case SID_CUT: 587cdf0e10cSrcweir case SID_COPY: 588cdf0e10cSrcweir if(!pTextView->HasSelection()) 589cdf0e10cSrcweir rSet.DisableItem(nWhich); 590cdf0e10cSrcweir break; 591cdf0e10cSrcweir case SID_PASTE: 592cdf0e10cSrcweir { 593cdf0e10cSrcweir TransferableDataHelper aDataHelper( 594cdf0e10cSrcweir TransferableDataHelper::CreateFromSystemClipboard( 595cdf0e10cSrcweir &aEditWin) ); 596cdf0e10cSrcweir sal_Bool bDisable = !aDataHelper.GetXTransferable().is() || 597cdf0e10cSrcweir 0 == aDataHelper.GetFormatCount(); 598cdf0e10cSrcweir if( bDisable ) 599cdf0e10cSrcweir rSet.DisableItem(nWhich); 600cdf0e10cSrcweir } 601cdf0e10cSrcweir break; 602cdf0e10cSrcweir } 603cdf0e10cSrcweir nWhich = aIter.NextWhich(); 604cdf0e10cSrcweir } 605cdf0e10cSrcweir } 606cdf0e10cSrcweir 607cdf0e10cSrcweir /*-------------------------------------------------------------------- 608cdf0e10cSrcweir Beschreibung: 609cdf0e10cSrcweir --------------------------------------------------------------------*/ 610cdf0e10cSrcweir 611cdf0e10cSrcweir 612cdf0e10cSrcweir SvxSearchItem* SwSrcView::GetSearchItem() 613cdf0e10cSrcweir { 614cdf0e10cSrcweir if(!pSearchItem) 615cdf0e10cSrcweir { 616cdf0e10cSrcweir pSearchItem = new SvxSearchItem(SID_SEARCH_ITEM); 617cdf0e10cSrcweir } 618cdf0e10cSrcweir return pSearchItem; 619cdf0e10cSrcweir } 620cdf0e10cSrcweir 621cdf0e10cSrcweir /*-------------------------------------------------------------------- 622cdf0e10cSrcweir Beschreibung: 623cdf0e10cSrcweir --------------------------------------------------------------------*/ 624cdf0e10cSrcweir 625cdf0e10cSrcweir 626cdf0e10cSrcweir void SwSrcView::SetSearchItem( const SvxSearchItem& rItem ) 627cdf0e10cSrcweir { 628cdf0e10cSrcweir delete pSearchItem; 629cdf0e10cSrcweir pSearchItem = (SvxSearchItem*)rItem.Clone(); 630cdf0e10cSrcweir } 631cdf0e10cSrcweir 632cdf0e10cSrcweir /*-------------------------------------------------------------------- 633cdf0e10cSrcweir Beschreibung: 634cdf0e10cSrcweir --------------------------------------------------------------------*/ 635cdf0e10cSrcweir 636cdf0e10cSrcweir 637cdf0e10cSrcweir sal_uInt16 SwSrcView::StartSearchAndReplace(const SvxSearchItem& rSearchItem, 638cdf0e10cSrcweir sal_Bool bFromStart, 639cdf0e10cSrcweir sal_Bool bApi, 640cdf0e10cSrcweir sal_Bool bRecursive) 641cdf0e10cSrcweir { 642cdf0e10cSrcweir ExtTextView* pTextView = aEditWin.GetTextView(); 643cdf0e10cSrcweir TextSelection aSel; 644cdf0e10cSrcweir TextPaM aPaM; 645cdf0e10cSrcweir 646cdf0e10cSrcweir sal_Bool bForward = !rSearchItem.GetBackward(); 647cdf0e10cSrcweir sal_Bool bAtStart = pTextView->GetSelection() == TextSelection( aPaM, aPaM ); 648cdf0e10cSrcweir 649cdf0e10cSrcweir if( !bForward ) 650cdf0e10cSrcweir aPaM = TextPaM( (sal_uLong)-1, (sal_uInt16)-1 ); 651cdf0e10cSrcweir 652cdf0e10cSrcweir if( bFromStart ) 653cdf0e10cSrcweir { 654cdf0e10cSrcweir aSel = pTextView->GetSelection(); 655cdf0e10cSrcweir pTextView->SetSelection( TextSelection( aPaM, aPaM )); 656cdf0e10cSrcweir } 657cdf0e10cSrcweir 658cdf0e10cSrcweir util::SearchOptions aSearchOpt( rSearchItem.GetSearchOptions() ); 659cdf0e10cSrcweir aSearchOpt.Locale = SvxCreateLocale( 660cdf0e10cSrcweir static_cast< LanguageType >( GetAppLanguage() ) ); 661cdf0e10cSrcweir 662cdf0e10cSrcweir sal_uInt16 nFound; 663cdf0e10cSrcweir sal_Bool bAll = sal_False; 664cdf0e10cSrcweir switch( rSearchItem.GetCommand() ) 665cdf0e10cSrcweir { 666cdf0e10cSrcweir case SVX_SEARCHCMD_FIND: 667cdf0e10cSrcweir case SVX_SEARCHCMD_FIND_ALL: 668cdf0e10cSrcweir nFound = pTextView->Search( aSearchOpt, bForward ); 669cdf0e10cSrcweir break; 670cdf0e10cSrcweir 671cdf0e10cSrcweir case SVX_SEARCHCMD_REPLACE_ALL: bAll = sal_True; 672cdf0e10cSrcweir case SVX_SEARCHCMD_REPLACE: 673cdf0e10cSrcweir nFound = pTextView->Replace( aSearchOpt, bAll, bForward ); 674cdf0e10cSrcweir break; 675cdf0e10cSrcweir 676cdf0e10cSrcweir default: 677cdf0e10cSrcweir nFound = 0; 678cdf0e10cSrcweir } 679cdf0e10cSrcweir 680cdf0e10cSrcweir if( !nFound ) 681cdf0e10cSrcweir { 682cdf0e10cSrcweir sal_Bool bNotFoundMessage = sal_False; 683cdf0e10cSrcweir if(!bRecursive) 684cdf0e10cSrcweir { 685cdf0e10cSrcweir if(!bFromStart) 686cdf0e10cSrcweir { 687cdf0e10cSrcweir bNotFoundMessage = bAtStart; 688cdf0e10cSrcweir } 689cdf0e10cSrcweir else 690cdf0e10cSrcweir { 691cdf0e10cSrcweir bNotFoundMessage = sal_True; 692cdf0e10cSrcweir pTextView->SetSelection( aSel ); 693cdf0e10cSrcweir } 694cdf0e10cSrcweir } 695cdf0e10cSrcweir else if(bAtStart) 696cdf0e10cSrcweir { 697cdf0e10cSrcweir bNotFoundMessage = sal_True; 698cdf0e10cSrcweir } 699cdf0e10cSrcweir 700cdf0e10cSrcweir 701cdf0e10cSrcweir if(!bApi) 702cdf0e10cSrcweir { 703cdf0e10cSrcweir if(bNotFoundMessage) 704cdf0e10cSrcweir { 705cdf0e10cSrcweir InfoBox( 0, SW_RES(MSG_NOT_FOUND)).Execute(); 706cdf0e10cSrcweir } 707cdf0e10cSrcweir else if(!bRecursive && RET_YES == 708cdf0e10cSrcweir QueryBox(0, SW_RES( bForward ? MSG_SEARCH_END 709cdf0e10cSrcweir : MSG_SEARCH_START)).Execute()) 710cdf0e10cSrcweir { 711cdf0e10cSrcweir pTextView->SetSelection( TextSelection( aPaM, aPaM ) ); 712cdf0e10cSrcweir StartSearchAndReplace( rSearchItem, sal_False, sal_False, sal_True ); 713cdf0e10cSrcweir } 714cdf0e10cSrcweir } 715cdf0e10cSrcweir } 716cdf0e10cSrcweir return nFound; 717cdf0e10cSrcweir } 718cdf0e10cSrcweir 719cdf0e10cSrcweir /*-------------------------------------------------------------------- 720cdf0e10cSrcweir Beschreibung: 721cdf0e10cSrcweir --------------------------------------------------------------------*/ 722cdf0e10cSrcweir 723cdf0e10cSrcweir sal_uInt16 SwSrcView::SetPrinter(SfxPrinter* pNew, sal_uInt16 nDiffFlags, bool ) 724cdf0e10cSrcweir { 725cdf0e10cSrcweir SwDocShell* pDocSh = GetDocShell(); 726cdf0e10cSrcweir if ( (SFX_PRINTER_JOBSETUP | SFX_PRINTER_PRINTER) & nDiffFlags ) 727cdf0e10cSrcweir { 728cdf0e10cSrcweir pDocSh->GetDoc()->setPrinter( pNew, true, true ); 729cdf0e10cSrcweir if ( nDiffFlags & SFX_PRINTER_PRINTER ) 730cdf0e10cSrcweir pDocSh->SetModified(); 731cdf0e10cSrcweir } 732cdf0e10cSrcweir if ( nDiffFlags & SFX_PRINTER_OPTIONS ) 733cdf0e10cSrcweir ::SetPrinter( pDocSh->getIDocumentDeviceAccess(), pNew, sal_True ); 734cdf0e10cSrcweir 735cdf0e10cSrcweir const sal_Bool bChgOri = nDiffFlags & SFX_PRINTER_CHG_ORIENTATION ? sal_True : sal_False; 736cdf0e10cSrcweir const sal_Bool bChgSize= nDiffFlags & SFX_PRINTER_CHG_SIZE ? sal_True : sal_False; 737cdf0e10cSrcweir if ( bChgOri || bChgSize ) 738cdf0e10cSrcweir { 739cdf0e10cSrcweir pDocSh->SetModified(); 740cdf0e10cSrcweir } 741cdf0e10cSrcweir return 0; 742cdf0e10cSrcweir } 743cdf0e10cSrcweir 744cdf0e10cSrcweir /*-------------------------------------------------------------------- 745cdf0e10cSrcweir Beschreibung: 746cdf0e10cSrcweir --------------------------------------------------------------------*/ 747cdf0e10cSrcweir 748cdf0e10cSrcweir SfxPrinter* SwSrcView::GetPrinter( sal_Bool bCreate ) 749cdf0e10cSrcweir { 750cdf0e10cSrcweir return GetDocShell()->GetDoc()->getPrinter( bCreate ); 751cdf0e10cSrcweir } 752cdf0e10cSrcweir 753cdf0e10cSrcweir /*-------------------------------------------------------------------- 754cdf0e10cSrcweir Beschreibung: 755cdf0e10cSrcweir --------------------------------------------------------------------*/ 756cdf0e10cSrcweir sal_Int32 SwSrcView::PrintSource( 757cdf0e10cSrcweir OutputDevice *pOutDev, 758cdf0e10cSrcweir sal_Int32 nPage, 759cdf0e10cSrcweir bool bCalcNumPagesOnly ) 760cdf0e10cSrcweir { 761cdf0e10cSrcweir if (!pOutDev || nPage <= 0) 762cdf0e10cSrcweir return 0; 763cdf0e10cSrcweir 764cdf0e10cSrcweir //! this a lgorithm for printing the n-th page is very poor since it 765cdf0e10cSrcweir //! needs to go over the text of all previous pages to get to the correct one. 766cdf0e10cSrcweir //! But since HTML source code is expected to be just a small number of pages 767cdf0e10cSrcweir //! even this poor algorithm should be enough... 768cdf0e10cSrcweir 769cdf0e10cSrcweir pOutDev->Push(); 770cdf0e10cSrcweir 771cdf0e10cSrcweir TextEngine* pTextEngine = aEditWin.GetTextEngine(); 772cdf0e10cSrcweir pOutDev->SetMapMode( MAP_100TH_MM ); 773cdf0e10cSrcweir Font aFont( aEditWin.GetOutWin()->GetFont() ); 774cdf0e10cSrcweir Size aSize( aFont.GetSize() ); 775cdf0e10cSrcweir aSize = aEditWin.GetOutWin()->PixelToLogic( aSize, MAP_100TH_MM ); 776cdf0e10cSrcweir aFont.SetSize( aSize ); 777cdf0e10cSrcweir aFont.SetColor( COL_BLACK ); 778cdf0e10cSrcweir pOutDev->SetFont( aFont ); 779cdf0e10cSrcweir 780cdf0e10cSrcweir String aTitle( GetViewFrame()->GetWindow().GetText() ); 781cdf0e10cSrcweir 782cdf0e10cSrcweir sal_uInt16 nLineHeight = (sal_uInt16) pOutDev->GetTextHeight(); // etwas mehr. 783cdf0e10cSrcweir sal_uInt16 nParaSpace = 10; 784cdf0e10cSrcweir 785cdf0e10cSrcweir Size aPaperSz = pOutDev->GetOutputSize(); 786cdf0e10cSrcweir aPaperSz.Width() -= (LMARGPRN + RMARGPRN); 787cdf0e10cSrcweir aPaperSz.Height() -= (TMARGPRN + BMARGPRN); 788cdf0e10cSrcweir 789cdf0e10cSrcweir // nLinepPage stimmt nicht, wenn Zeilen umgebrochen werden muessen... 790cdf0e10cSrcweir sal_uInt16 nLinespPage = (sal_uInt16) (aPaperSz.Height() / nLineHeight); 791cdf0e10cSrcweir sal_uInt16 nCharspLine = (sal_uInt16) (aPaperSz.Width() / pOutDev->GetTextWidth( 'X' )); 792cdf0e10cSrcweir sal_uInt16 nParas = static_cast< sal_uInt16 >( pTextEngine->GetParagraphCount() ); 793cdf0e10cSrcweir 794cdf0e10cSrcweir sal_uInt16 nPages = (sal_uInt16) (nParas / nLinespPage + 1 ); 795cdf0e10cSrcweir sal_uInt16 nCurPage = 1; 796cdf0e10cSrcweir 797cdf0e10cSrcweir // Header drucken... 798cdf0e10cSrcweir if (!bCalcNumPagesOnly && nPage == nCurPage) 799cdf0e10cSrcweir lcl_PrintHeader( *pOutDev, nPages, nCurPage, aTitle ); 800cdf0e10cSrcweir const Point aStartPos( LMARGPRN, TMARGPRN ); 801cdf0e10cSrcweir Point aPos( aStartPos ); 802cdf0e10cSrcweir for ( sal_uInt16 nPara = 0; nPara < nParas; ++nPara ) 803cdf0e10cSrcweir { 804cdf0e10cSrcweir String aLine( pTextEngine->GetText( nPara ) ); 805cdf0e10cSrcweir lcl_ConvertTabsToSpaces( aLine ); 806cdf0e10cSrcweir sal_uInt16 nLines = aLine.Len() / nCharspLine + 1; 807cdf0e10cSrcweir for ( sal_uInt16 nLine = 0; nLine < nLines; ++nLine ) 808cdf0e10cSrcweir { 809cdf0e10cSrcweir String aTmpLine( aLine, nLine * nCharspLine, nCharspLine ); 810cdf0e10cSrcweir aPos.Y() += nLineHeight; 811cdf0e10cSrcweir if ( aPos.Y() > ( aPaperSz.Height() + TMARGPRN - nLineHeight/2 ) ) 812cdf0e10cSrcweir { 813cdf0e10cSrcweir ++nCurPage; 814cdf0e10cSrcweir if (!bCalcNumPagesOnly && nPage == nCurPage) 815cdf0e10cSrcweir lcl_PrintHeader( *pOutDev, nPages, nCurPage, aTitle ); 816cdf0e10cSrcweir aPos = aStartPos; 817cdf0e10cSrcweir } 818cdf0e10cSrcweir if (!bCalcNumPagesOnly && nPage == nCurPage) 819cdf0e10cSrcweir pOutDev->DrawText( aPos, aTmpLine ); 820cdf0e10cSrcweir } 821cdf0e10cSrcweir aPos.Y() += nParaSpace; 822cdf0e10cSrcweir } 823cdf0e10cSrcweir 824cdf0e10cSrcweir pOutDev->Pop(); 825cdf0e10cSrcweir 826cdf0e10cSrcweir DBG_ASSERT( bCalcNumPagesOnly || nPage <= nCurPage, "page number out of range" ); 827cdf0e10cSrcweir return nCurPage; 828cdf0e10cSrcweir } 829cdf0e10cSrcweir 830cdf0e10cSrcweir 831cdf0e10cSrcweir /*-------------------------------------------------------------------- 832cdf0e10cSrcweir Beschreibung: 833cdf0e10cSrcweir --------------------------------------------------------------------*/ 834cdf0e10cSrcweir 835cdf0e10cSrcweir 836cdf0e10cSrcweir void SwSrcView::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) 837cdf0e10cSrcweir { 838cdf0e10cSrcweir if ( rHint.ISA(SfxSimpleHint) && 839cdf0e10cSrcweir ( 840cdf0e10cSrcweir ((SfxSimpleHint&) rHint).GetId() == SFX_HINT_MODECHANGED || 841cdf0e10cSrcweir ( 842cdf0e10cSrcweir ((SfxSimpleHint&) rHint).GetId() == SFX_HINT_TITLECHANGED && 843cdf0e10cSrcweir !GetDocShell()->IsReadOnly() && aEditWin.IsReadonly() 844cdf0e10cSrcweir ) 845cdf0e10cSrcweir ) 846cdf0e10cSrcweir ) 847cdf0e10cSrcweir { 848cdf0e10cSrcweir // Broadcast kommt nur einmal! 849cdf0e10cSrcweir const SwDocShell* pDocSh = GetDocShell(); 850cdf0e10cSrcweir const sal_Bool bReadonly = pDocSh->IsReadOnly(); 851cdf0e10cSrcweir aEditWin.SetReadonly(bReadonly); 852cdf0e10cSrcweir } 853cdf0e10cSrcweir SfxViewShell::Notify(rBC, rHint); 854cdf0e10cSrcweir } 855cdf0e10cSrcweir 856cdf0e10cSrcweir /*-----------------19.04.97 10:19------------------- 857cdf0e10cSrcweir 858cdf0e10cSrcweir --------------------------------------------------*/ 859cdf0e10cSrcweir void SwSrcView::Load(SwDocShell* pDocShell) 860cdf0e10cSrcweir { 861cdf0e10cSrcweir SvxHtmlOptions* pHtmlOptions = SvxHtmlOptions::Get(); 862cdf0e10cSrcweir const sal_Char *pCharSet = 863cdf0e10cSrcweir rtl_getBestMimeCharsetFromTextEncoding( pHtmlOptions->GetTextEncoding() ); 864cdf0e10cSrcweir rtl_TextEncoding eDestEnc = rtl_getTextEncodingFromMimeCharset( pCharSet ); 865cdf0e10cSrcweir 866cdf0e10cSrcweir aEditWin.SetReadonly(pDocShell->IsReadOnly()); 867cdf0e10cSrcweir aEditWin.SetTextEncoding(eDestEnc); 868cdf0e10cSrcweir SfxMedium* pMedium = pDocShell->GetMedium(); 869cdf0e10cSrcweir 870cdf0e10cSrcweir const SfxFilter* pFilter = pMedium->GetFilter(); 871cdf0e10cSrcweir sal_Bool bHtml = pFilter && pFilter->GetUserData().EqualsAscii("HTML"); 872cdf0e10cSrcweir sal_Bool bDocModified = pDocShell->IsModified(); 873cdf0e10cSrcweir if(bHtml && !bDocModified && pDocShell->HasName()) 874cdf0e10cSrcweir { 875cdf0e10cSrcweir SvStream* pStream = pMedium->GetInStream(); 876cdf0e10cSrcweir if(pStream && 0 == pStream->GetError() ) 877cdf0e10cSrcweir { 878cdf0e10cSrcweir rtl_TextEncoding eHeaderEnc = 879cdf0e10cSrcweir SfxHTMLParser::GetEncodingByHttpHeader( 880cdf0e10cSrcweir pDocShell->GetHeaderAttributes() ); 881cdf0e10cSrcweir if( RTL_TEXTENCODING_DONTKNOW == eHeaderEnc ) 882cdf0e10cSrcweir { 883cdf0e10cSrcweir const sal_Char *pTmpCharSet = 884cdf0e10cSrcweir rtl_getBestMimeCharsetFromTextEncoding( RTL_TEXTENCODING_ISO_8859_1 ); 885cdf0e10cSrcweir eHeaderEnc = rtl_getTextEncodingFromMimeCharset( pTmpCharSet ); 886cdf0e10cSrcweir } 887cdf0e10cSrcweir if( RTL_TEXTENCODING_DONTKNOW != eHeaderEnc && 888cdf0e10cSrcweir eDestEnc != eHeaderEnc ) 889cdf0e10cSrcweir { 890cdf0e10cSrcweir eDestEnc = eHeaderEnc; 891cdf0e10cSrcweir aEditWin.SetTextEncoding(eDestEnc); 892cdf0e10cSrcweir } 893cdf0e10cSrcweir pStream->SetStreamCharSet( eDestEnc ); 894cdf0e10cSrcweir pStream->Seek(0); 895cdf0e10cSrcweir TextEngine* pTextEngine = aEditWin.GetTextEngine(); 896cdf0e10cSrcweir pTextEngine->EnableUndo(sal_False); 897cdf0e10cSrcweir aEditWin.Read(*pStream);//, EE_FORMAT_TEXT); 898cdf0e10cSrcweir pTextEngine->EnableUndo(sal_True); 899cdf0e10cSrcweir } 900cdf0e10cSrcweir else 901cdf0e10cSrcweir { 902cdf0e10cSrcweir Window *pTmpWindow = &GetViewFrame()->GetWindow(); 903cdf0e10cSrcweir InfoBox(pTmpWindow, SW_RES(MSG_ERR_SRCSTREAM)).Execute(); 904cdf0e10cSrcweir } 905cdf0e10cSrcweir } 906cdf0e10cSrcweir else 907cdf0e10cSrcweir { 908cdf0e10cSrcweir utl::TempFile aTempFile; 909cdf0e10cSrcweir aTempFile.EnableKillingFile(); 910cdf0e10cSrcweir String sFileURL( aTempFile.GetURL() ); 911cdf0e10cSrcweir SvtSaveOptions aOpt; 912cdf0e10cSrcweir 913cdf0e10cSrcweir { 914cdf0e10cSrcweir SfxMedium aMedium( sFileURL,STREAM_READWRITE, sal_True ); 915cdf0e10cSrcweir SwWriter aWriter( aMedium, *pDocShell->GetDoc() ); 916cdf0e10cSrcweir WriterRef xWriter; 917cdf0e10cSrcweir ::GetHTMLWriter(aEmptyStr, aMedium.GetBaseURL( true ), xWriter); 918cdf0e10cSrcweir String sWriteName = pDocShell->HasName() ? 919cdf0e10cSrcweir pMedium->GetName() : 920cdf0e10cSrcweir (const String&) sFileURL; 921cdf0e10cSrcweir sal_uLong nRes = aWriter.Write(xWriter, &sWriteName); 922cdf0e10cSrcweir if(nRes) 923cdf0e10cSrcweir { 924cdf0e10cSrcweir ErrorHandler::HandleError(ErrCode(nRes)); 925cdf0e10cSrcweir aEditWin.SetReadonly(sal_True); 926cdf0e10cSrcweir } 927cdf0e10cSrcweir aMedium.Commit(); 928cdf0e10cSrcweir SvStream* pInStream = aMedium.GetInStream(); 929cdf0e10cSrcweir pInStream->Seek(0); 930cdf0e10cSrcweir pInStream->SetStreamCharSet( eDestEnc ); 931cdf0e10cSrcweir 932cdf0e10cSrcweir 933cdf0e10cSrcweir aEditWin.Read(*pInStream);//, EE_FORMAT_TEXT); 934cdf0e10cSrcweir } 935cdf0e10cSrcweir } 936cdf0e10cSrcweir aEditWin.ClearModifyFlag(); 937cdf0e10cSrcweir 938cdf0e10cSrcweir eLoadEncoding = eDestEnc; 939cdf0e10cSrcweir 940cdf0e10cSrcweir if(bDocModified) 941cdf0e10cSrcweir pDocShell->SetModified();// das Flag wird zwischendurch zurueckgesetzt 942cdf0e10cSrcweir // AutoLoad abschalten 943cdf0e10cSrcweir pDocShell->SetAutoLoad(INetURLObject(), 0, sal_False); 944cdf0e10cSrcweir DBG_ASSERT(PTR_CAST(SwWebDocShell, pDocShell), "Wieso keine WebDocShell?"); 945cdf0e10cSrcweir sal_uInt16 nLine = ((SwWebDocShell*)pDocShell)->GetSourcePara(); 946cdf0e10cSrcweir aEditWin.SetStartLine(nLine); 947cdf0e10cSrcweir aEditWin.GetTextEngine()->ResetUndo(); 948cdf0e10cSrcweir aEditWin.GetOutWin()->GrabFocus(); 949cdf0e10cSrcweir } 950cdf0e10cSrcweir 951cdf0e10cSrcweir 952