merge the formfield patch from ooo-build
[ooovba.git] / sw / source / filter / ww1 / w1par.cxx
blobadcbc30866f5456f11f7998b95230640fd8f6beb
1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: w1par.cxx,v $
10 * $Revision: 1.9 $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 // MARKER(update_precomp.py): autogen include statement, do not remove
32 #include "precompiled_sw.hxx"
35 #include <pam.hxx> // fuer SwPam
36 #include <doc.hxx>
37 #include <ndtxt.hxx> // class SwTxtNode
38 #include <fltini.hxx> // Ww1Reader
39 #include <w1par.hxx>
40 #ifndef _SWFLTOPT_HXX
41 #include <swfltopt.hxx>
42 #endif
43 #include <mdiexp.hxx> // StatLine...()
44 #include <swerror.h> // ERR_WW1_...
45 #ifndef _STATSTR_HRC
46 #include <statstr.hrc> // ResId fuer Statusleiste
47 #endif
49 //----------------------------------------
50 // Initialisieren der Feld-FilterFlags
51 //----------------------------------------
53 static ULONG WW1_Read_FieldIniFlags()
55 // USHORT i;
56 static const sal_Char* aNames[ 1 ] = { "WinWord/WW1F" };
57 sal_uInt32 aVal[ 1 ];
58 SwFilterOptions aOpt( 1, aNames, aVal );
59 ULONG nFieldFlags = aVal[ 0 ];
61 if ( SwFltGetFlag( nFieldFlags, SwFltControlStack::HYPO ) )
63 SwFltSetFlag( nFieldFlags, SwFltControlStack::BOOK_TO_VAR_REF );
64 SwFltSetFlag( nFieldFlags, SwFltControlStack::TAGS_DO_ID );
65 SwFltSetFlag( nFieldFlags, SwFltControlStack::TAGS_IN_TEXT );
66 SwFltSetFlag( nFieldFlags, SwFltControlStack::ALLOW_FLD_CR );
68 return nFieldFlags;
71 ////////////////////////////////////////////////// StarWriter-Interface
73 // Eine Methode liefern die call-Schnittstelle fuer den Writer.
74 // Read() liest eine Datei. hierzu werden zwei Objekte erzeugt, die Shell,
75 // die die Informationen aufnimmt und der Manager der sie aus der Datei liest.
76 // Diese werden dann einfach per Pipe 'uebertragen'.
79 ULONG WW1Reader::Read(SwDoc& rDoc, const String& rBaseURL, SwPaM& rPam, const String& /*cName*/)
81 ULONG nRet = ERR_SWG_READ_ERROR;
82 ASSERT(pStrm!=NULL, "W1-Read ohne Stream");
83 if (pStrm != NULL)
85 BOOL bNew = !bInsertMode; // Neues Doc ( kein Einfuegen )
87 // erstmal eine shell konstruieren: die ist schnittstelle
88 // zum writer-dokument
89 ULONG nFieldFlags = WW1_Read_FieldIniFlags();
90 Ww1Shell* pRdr = new Ww1Shell( rDoc, rPam, rBaseURL, bNew, nFieldFlags );
91 if( pRdr )
93 // dann den manager, der liest die struktur des word-streams
94 Ww1Manager* pMan = new Ww1Manager( *pStrm, nFieldFlags );
95 if( pMan )
97 if( !pMan->GetError() )
99 ::StartProgress( STR_STATSTR_W4WREAD, 0, 100,
100 rDoc.GetDocShell() );
101 ::SetProgressState( 0, rDoc.GetDocShell() );
102 // jetzt nur noch alles rueberschieben
103 *pRdr << *pMan;
104 if( !pMan->GetError() )
105 // und nur hier, wenn kein fehler auftrat
106 // fehlerfreiheit melden
107 nRet = 0; // besser waere: WARN_SWG_FEATURES_LOST;
108 ::EndProgress( rDoc.GetDocShell() );
110 else
112 if( pMan->GetFib().GetFIB().fComplexGet() )
113 //!!! ACHTUNG: hier muss eigentlich ein Error
114 // wegen Fastsave kommen, das der PMW-Filter
115 // das nicht unterstuetzt. Stattdessen temporaer
116 // nur eine Warnung, bis die entsprechende
117 // Meldung und Behandlung weiter oben eingebaut ist.
118 // nRet = WARN_WW6_FASTSAVE_ERR;
119 // Zum Einchecken mit neuem String:
120 nRet = ERR_WW6_FASTSAVE_ERR;
123 delete pMan;
125 delete pRdr;
127 Ww1Sprm::DeinitTab();
128 return nRet;
131 ///////////////////////////////////////////////////////////////// Shell
133 // Die Shell ist die Schnittstelle vom Filter zum Writer. Sie ist
134 // abgeleitet von der mit ww-filter gemeinsam benutzten Shell
135 // SwFltShell und enthaelt alle fuer ww1 noetigen Erweiterungen. Wie
136 // in einen Stream werden alle Informationen, die aus der Datei
137 // gelesen werden, in die shell ge'piped'.
139 Ww1Shell::Ww1Shell( SwDoc& rD, SwPaM& rPam, const String& rBaseURL, BOOL bNew, ULONG nFieldFlags)
140 : SwFltShell(&rD, rPam, rBaseURL, bNew, nFieldFlags)