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 #ifndef _BASTYPE2_HXX
24 #define _BASTYPE2_HXX
25 
26 #include "doceventnotifier.hxx"
27 
28 #include <memory>
29 #include "tools/solar.h"
30 
31 #define _SVICNVW_HXX
32 #include <svtools/svtreebx.hxx>
33 #include <svl/lstner.hxx>
34 #include <basic/sbstar.hxx>
35 #include <sbxitem.hxx>
36 #include "basobj.hxx"
37 
38 enum BasicEntryType { OBJ_TYPE_UNKNOWN, OBJ_TYPE_DOCUMENT, OBJ_TYPE_LIBRARY, OBJ_TYPE_MODULE, OBJ_TYPE_DIALOG, OBJ_TYPE_METHOD, OBJ_TYPE_DOCUMENT_OBJECTS, OBJ_TYPE_USERFORMS, OBJ_TYPE_NORMAL_MODULES, OBJ_TYPE_CLASS_MODULES };
39 
40 #define BROWSEMODE_MODULES		0x01
41 #define BROWSEMODE_SUBS			0x02
42 #define BROWSEMODE_DIALOGS		0x04
43 
44 class SbMethod;
45 class SbxObject;
46 class SbModule;
47 class SvLBoxEntry;
48 class SbxVariable;
49 class String;
50 
51 
52 class BasicEntry
53 {
54 private:
55     BasicEntryType  m_eType;
56 
57 public:
BasicEntry(BasicEntryType eType)58                     BasicEntry( BasicEntryType eType )  { m_eType = eType; }
BasicEntry(const BasicEntry & r)59                     BasicEntry( const BasicEntry& r )   { m_eType = r.m_eType; }
60     virtual         ~BasicEntry();
61 
GetType() const62     BasicEntryType  GetType() const                     { return m_eType; }
63 };
64 
65 class BasicDocumentEntry : public BasicEntry
66 {
67 private:
68     ScriptDocument      m_aDocument;
69     LibraryLocation     m_eLocation;
70 
71 public:
72                     BasicDocumentEntry( const ScriptDocument& rDocument, LibraryLocation eLocation, BasicEntryType eType = OBJ_TYPE_DOCUMENT );
73     virtual         ~BasicDocumentEntry();
74 
75     const ScriptDocument&
GetDocument() const76                     GetDocument() const { return m_aDocument; }
GetLocation() const77     LibraryLocation GetLocation() const { return m_eLocation; }
78 };
79 
80 class BasicLibEntry : public BasicDocumentEntry
81 {
82 private:
83     String          m_aLibName;
84 
85 public:
86                     BasicLibEntry( const ScriptDocument& rDocument, LibraryLocation eLocation, const String& rLibName, BasicEntryType eType = OBJ_TYPE_LIBRARY );
87     virtual         ~BasicLibEntry();
88 
GetLibName() const89     const String&   GetLibName() const { return m_aLibName; }
90 };
91 
92 class BasicEntryDescriptor
93 {
94     ScriptDocument          m_aDocument;
95     LibraryLocation         m_eLocation;
96     String                  m_aLibName;
97     String                  m_aLibSubName;  // for vba entry:  Document Objects, Class Modules, Forms and Normal Modules
98     String                  m_aName;
99     String                  m_aMethodName;
100     BasicEntryType          m_eType;
101 
102 public:
103                             BasicEntryDescriptor();
104 	                        BasicEntryDescriptor( const ScriptDocument& rDocument, LibraryLocation eLocation, const String& rLibName, const String& rLibSubName, const String& rName, BasicEntryType eType );
105 	                        BasicEntryDescriptor( const ScriptDocument& rDocument, LibraryLocation eLocation, const String& rLibName, const String& rLibSubName, const String& rName, const String& rMethodName, BasicEntryType eType );
106     virtual                 ~BasicEntryDescriptor();
107 
108                             BasicEntryDescriptor( const BasicEntryDescriptor& rDesc );
109     BasicEntryDescriptor&   operator=( const BasicEntryDescriptor& rDesc );
110     bool                    operator==( const BasicEntryDescriptor& rDesc ) const;
111 
112     const ScriptDocument&
GetDocument() const113                             GetDocument() const { return m_aDocument; }
SetDocument(const ScriptDocument & rDocument)114     void                    SetDocument( const ScriptDocument& rDocument ) { m_aDocument = rDocument; }
115 
GetLocation() const116     LibraryLocation         GetLocation() const { return m_eLocation; }
SetLocation(LibraryLocation eLocation)117     void                    SetLocation( LibraryLocation eLocation ) { m_eLocation = eLocation; }
118 
GetLibName() const119     const String&           GetLibName() const { return m_aLibName; }
SetLibName(const String & aLibName)120     void                    SetLibName( const String& aLibName ) { m_aLibName = aLibName; }
121 
GetLibSubName() const122     const String&           GetLibSubName() const { return m_aLibSubName; }
SetLibSubName(const String & aLibSubName)123     void                    SetLibSubName( const String& aLibSubName ) { m_aLibSubName = aLibSubName; }
124 
GetName() const125     const String&           GetName() const { return m_aName; }
SetName(const String & aName)126     void                    SetName( const String& aName ) { m_aName = aName; }
127 
GetMethodName() const128     const String&           GetMethodName() const { return m_aMethodName; }
SetMethodName(const String & aMethodName)129     void                    SetMethodName( const String& aMethodName ) { m_aMethodName = aMethodName; }
130 
GetType() const131     BasicEntryType          GetType() const { return m_eType; }
SetType(BasicEntryType eType)132     void                    SetType( BasicEntryType eType ) { m_eType = eType; }
133 };
134 
135 
136 /****************************************
137 	Zuordnung von Typen und Pointern in BasicEntrys:
138 
139 	OBJ_TYPE_DOCUMENT        BasicDocumentEntry
140 	OBJ_TYPE_LIBRARY         BasicEntry
141     OBJ_TYPE_MODULE          BasicEntry
142     OBJ_TYPE_DIALOG          BasicEntry
143     OBJ_TYPE_METHOD          BasicEntry
144 
145 ******************************************/
146 
147 class BasicTreeListBox  :public SvTreeListBox
148                         ,public ::basctl::DocumentEventListener
149 {
150 private:
151     sal_uInt16                          nMode;
152     ::basctl::DocumentEventNotifier m_aNotifier;
153 
154     void            SetEntryBitmaps( SvLBoxEntry * pEntry, const Image& rImage, const Image& rImageHC );
155 
156 protected:
157 	virtual void			RequestingChilds( SvLBoxEntry* pParent );
158 	virtual void 			ExpandedHdl();
159 	virtual SvLBoxEntry* 	CloneEntry( SvLBoxEntry* pSource );
160 	virtual long			ExpandingHdl();
161 
162     void                    ImpCreateLibEntries( SvLBoxEntry* pShellRootEntry, const ScriptDocument& rDocument, LibraryLocation eLocation );
163 	void 					ImpCreateLibSubEntries( SvLBoxEntry* pLibRootEntry, const ScriptDocument& rDocument, const String& rLibName );
164 	void 					ImpCreateLibSubEntriesInVBAMode( SvLBoxEntry* pLibRootEntry, const ScriptDocument& rDocument, const String& rLibName );
165 	void 					ImpCreateLibSubSubEntriesInVBAMode( SvLBoxEntry* pLibSubRootEntry, const ScriptDocument& rDocument, const String& rLibName );
166     SvLBoxEntry*            ImpFindEntry( SvLBoxEntry* pParent, const String& rText );
167 
168     // DocumentEventListener
169     virtual void onDocumentCreated( const ScriptDocument& _rDocument );
170     virtual void onDocumentOpened( const ScriptDocument& _rDocument );
171     virtual void onDocumentSave( const ScriptDocument& _rDocument );
172     virtual void onDocumentSaveDone( const ScriptDocument& _rDocument );
173     virtual void onDocumentSaveAs( const ScriptDocument& _rDocument );
174     virtual void onDocumentSaveAsDone( const ScriptDocument& _rDocument );
175     virtual void onDocumentClosed( const ScriptDocument& _rDocument );
176     virtual void onDocumentTitleChanged( const ScriptDocument& _rDocument );
177     virtual void onDocumentModeChanged( const ScriptDocument& _rDocument );
178 
179 public:
180 					BasicTreeListBox( Window* pParent, const ResId& rRes );
181 					~BasicTreeListBox();
182 
183     void            ScanEntry( const ScriptDocument& rDocument, LibraryLocation eLocation );
184     void            ScanAllEntries();
185 	void			UpdateEntries();
186 
187 	sal_Bool			IsEntryProtected( SvLBoxEntry* pEntry );
188 
SetMode(sal_uInt16 nM)189 	void			SetMode( sal_uInt16 nM ) { nMode = nM; }
GetMode() const190 	sal_uInt16			GetMode() const { return nMode; }
191 
192 	SbModule*		FindModule( SvLBoxEntry* pEntry );
193 	SbxVariable*	FindVariable( SvLBoxEntry* pEntry );
194     SvLBoxEntry*    FindRootEntry( const ScriptDocument& rDocument, LibraryLocation eLocation );
195     SvLBoxEntry*    FindEntry( SvLBoxEntry* pParent, const String& rText, BasicEntryType eType );
196 
197     BasicEntryDescriptor    GetEntryDescriptor( SvLBoxEntry* pEntry );
198 
199     sal_uInt16          ConvertType( BasicEntryType eType );
200     bool            IsValidEntry( SvLBoxEntry* pEntry );
201 
202     SvLBoxEntry*    AddEntry( const String& rText, const Image& rImage, const Image& rImageHC,
203                               SvLBoxEntry* pParent, bool bChildrenOnDemand,
204                               std::auto_ptr< BasicEntry > aUserData );
205 
206     String          GetRootEntryName( const ScriptDocument& rDocument, LibraryLocation eLocation ) const;
207     void            GetRootEntryBitmaps( const ScriptDocument& rDocument, Image& rImage, Image& rImageHC );
208 
209     void            SetCurrentEntry( BasicEntryDescriptor& rDesc );
210 
211 private:
212     LibraryType     GetLibraryType() const;
213 };
214 
215 #endif	// _BASTYPE2_HXX
216