xref: /trunk/main/filter/inc/filter/msfilter/svxmsbas.hxx (revision 914d351e5f5b84e4342a86d6ab8d4aca7308b9bd)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef _SVXMSBAS_HXX
25 #define _SVXMSBAS_HXX
26 
27 #include <tools/solar.h>
28 #include "filter/msfilter/msfilterdllapi.h"
29 
30 #include <sot/storage.hxx>
31 
32 class SfxObjectShell;
33 
34 /* Construct with the root storage of the MS document, with bImportCode
35  * set the visual basic code will be imported into the stardocument when Import
36  * is called, with bCopyStorage set, the visual basic storage tree will be
37  * copied completely into staroffice, so that any future export to a msoffice
38  * format will retain the vba code, allowing a lossless roundtrip from
39  * msoffice to staroffice and back.
40  *
41  * Setting bAsComment to true in Import will import the visual basic as a
42  * starbasic comment. Which is currently necessary, as vb is not valid sb.
43  *
44  * Setting bStripped will remove the "Attribute" lines from the vb, msoffice
45  * does this itself when it shows the vb code in the vbeditor, so this is
46  * probably what the user expects to see when viewing the code
47  */
48 
49 class MSFILTER_DLLPUBLIC SvxImportMSVBasic
50 {
51 public:
SvxImportMSVBasic(SfxObjectShell & rDocS,SotStorage & rRoot,sal_Bool bImportCode=sal_True,sal_Bool bCopyStorage=sal_True)52     SvxImportMSVBasic( SfxObjectShell &rDocS, SotStorage &rRoot,
53                         sal_Bool bImportCode = sal_True, sal_Bool bCopyStorage = sal_True )
54         :   xRoot(&rRoot), rDocSh(rDocS),
55             bImport(bImportCode), bCopy(bCopyStorage)
56         {}
57     // returns the status of import:
58     // 0 - nothing has done
59     // bit 0 = 1 -> any code is imported to the SO-Basic
60     // bit 1 = 1 -> the VBA - storage is copy to the ObjectShell storage
61     int Import( const String& rStorageName, const String &rSubStorageName,
62                 sal_Bool bAsComment=sal_True, sal_Bool bStripped=sal_True );
63     int Import( const String& rStorageName, const String &rSubStorageName,
64                 const std::vector< String >& codeNames,
65                 sal_Bool bAsComment=sal_True, sal_Bool bStripped=sal_True );
66 
67     // only for the export - copy or delete the saved VBA-macro-storage
68     // form the ObjectShell
69     // - returns a warning code if a modified basic exist, in all other
70     //   cases return ERRCODE_NONE.
71     sal_uLong SaveOrDelMSVBAStorage( sal_Bool bSaveInto, const String& rStorageName );
72 
73     // check if the MS-VBA-Storage exist in the RootStorage of the DocShell.
74     // If it exists, then return the WarningId for losing the information.
75     static sal_uLong GetSaveWarningOfMSVBAStorage( SfxObjectShell &rDocS );
76 
77     static String GetMSBasicStorageName();
78 private:
79     SotStorageRef xRoot;
80     SfxObjectShell &rDocSh;
81     sal_Bool bImport;
82     sal_Bool bCopy;
83 
84     MSFILTER_DLLPRIVATE sal_Bool ImportCode_Impl( const String& rStorageName,
85                           const String &rSubStorageName,
86                           const std::vector< String >& codeNames,
87                           sal_Bool bAsComment, sal_Bool bStripped);
88     MSFILTER_DLLPRIVATE bool ImportForms_Impl(const String& rStorageName,
89         const String &rSubStorageName);
90     MSFILTER_DLLPRIVATE sal_Bool CopyStorage_Impl( const String& rStorageName,
91                            const String &rSubStorageName);
92 };
93 
94 #endif
95