xref: /aoo41x/main/sfx2/inc/sfx2/linkmgr.hxx (revision 8d6615f2)
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 _LINKMGR_HXX
24 #define _LINKMGR_HXX
25 
26 #include "sal/config.h"
27 #include "sfx2/dllapi.h"
28 #include <sfx2/linksrc.hxx>
29 #include <tools/string.hxx>
30 #include <svl/svarray.hxx>
31 
32 class SfxObjectShell;
33 class Graphic;
34 class Size;
35 
36 namespace sfx2
37 {
38     // Damit der Link ueber den Status der zu ladenen Grafik informierten werden
39     // verschickt das FileObject ein SvData, mit der FormatId
40     // "RegisterStatusInfoId" und ein einem String als Datentraeger. Dieser
41     // enthaelt den folgenden enum.
42 
43 class SvBaseLink;
44 class SvBaseLinkRef;
45 
46 typedef SvBaseLinkRef* SvBaseLinkRefPtr;
47 SV_DECL_PTRARR( SvBaseLinks, SvBaseLinkRefPtr, 1, 1 )
48 
49 typedef SvLinkSource* SvLinkSourcePtr;
50 SV_DECL_PTRARR( SvLinkSources, SvLinkSourcePtr, 1, 1 )
51 
52 class SFX2_DLLPUBLIC LinkManager
53 {
54 	SvBaseLinks		aLinkTbl;
55 	SvLinkSources aServerTbl;
56 
57     SfxObjectShell *pPersist; // LinkMgr muss vor SfxObjectShell freigegeben werden
58 
59 	sal_Bool mAutoAskUpdateAllLinks;
60 	sal_Bool mUpdateAsked;
61 	sal_Bool mAllowUpdate;
62 
63 	void SetUserAllowsLinkUpdate(SvBaseLink *pLink, sal_Bool allows);
64 protected:
65 	sal_Bool 		InsertLink( SvBaseLink* pLink, sal_uInt16 nObjType, sal_uInt16 nUpdateType,
66 							const String* pName = 0 );
67 public:
68 
69     enum LinkState
70     {
71         STATE_LOAD_OK,
72         STATE_LOAD_ERROR,
73         STATE_LOAD_ABORT
74     };
75 
76 	            LinkManager( SfxObjectShell * pCacheCont );
77 	            ~LinkManager();
78 
GetPersist() const79     SfxObjectShell*    GetPersist() const              { return pPersist; }
SetPersist(SfxObjectShell * p)80     void        SetPersist( SfxObjectShell * p )   { pPersist = p; }
81 
82 	void		Remove( SvBaseLink *pLink );
83 	void		Remove( sal_uInt16 nPos, sal_uInt16 nCnt = 1 );
84 	sal_Bool		Insert( SvBaseLink* pLink );
85 
86 				// den Link mit einem SvLinkSource verbinden und in die Liste eintragen
87 	sal_Bool 		InsertDDELink( SvBaseLink*,
88 						const String& rServer,
89 						const String& rTopic,
90 						const String& rItem );
91 
92 				// falls am Link schon alles eingestellt ist !
93 	sal_Bool 		InsertDDELink( SvBaseLink* );
94 
95 	// den Link mit einem PseudoObject verbinden und in die Liste eintragen
96 	sal_Bool InsertFileLink( sfx2::SvBaseLink&,
97 						sal_uInt16 nFileType,
98 						const String& rTxt,
99 						const String* pFilterNm = 0,
100 						const String* pRange = 0 );
101 
102 			// falls am Link schon alles eingestellt ist !
103 	sal_Bool InsertFileLink( sfx2::SvBaseLink& );
104 
105 				// erfrage die Strings fuer den Dialog
106 	sal_Bool GetDisplayNames( const SvBaseLink *,
107 									String* pType,
108 									String* pFile = 0,
109 									String* pLink = 0,
110 									String* pFilter = 0 ) const;
111 
112     SvLinkSourceRef CreateObj( SvBaseLink* );
113 
114     /// Ask (once) to allow updating links
115 	sal_Bool GetUserAllowsLinkUpdate(Window *pParent);
116 
117 	// Automatically ask user about update all links, on first insert
118     // If we already asked the user, we forget about it and will ask again.
119 	void SetAutoAskUpdateAllLinks();
120     // Never ask the user: just update all links
121     void SetNeverAskUpdateAllLinks();
122 
123 	void 		UpdateAllLinks( sal_Bool bAskUpdate = sal_True,
124 								sal_Bool bCallErrHdl = sal_True,
125                                 sal_Bool bUpdateGrfLinks = sal_False,
126                                 Window* pParentWin = 0 );
127 
128 				// Liste aller Links erfragen (z.B. fuer Verknuepfungs-Dialog)
GetLinks() const129 	const 		SvBaseLinks& GetLinks() const { return aLinkTbl; }
130 
131 	// ----------------- Serverseitige Verwaltung --------------------
132 
133 				// Liste der zu serviereden Links erfragen
GetServers() const134 	const SvLinkSources& GetServers() const { return aServerTbl; }
135 				// einen zu servierenden Link eintragen/loeschen
136 	sal_Bool 		InsertServer( SvLinkSource* rObj );
137 	void 		RemoveServer( SvLinkSource* rObj );
RemoveServer(sal_uInt16 nPos,sal_uInt16 nCnt=1)138 	void 		RemoveServer( sal_uInt16 nPos, sal_uInt16 nCnt = 1 )
139 				{	aServerTbl.Remove( nPos, nCnt ); }
140 
141 	// eine Uebertragung wird abgebrochen, also alle DownloadMedien canceln
142 	// (ist zur Zeit nur fuer die FileLinks interressant!)
143 	void CancelTransfers();
144 
145 	// um Status Informationen aus dem FileObject an den BaseLink zu
146 	// senden, gibt es eine eigene ClipBoardId. Das SvData-Object hat
147 	// dann die entsprechenden Informationen als String.
148 	// Wird zur Zeit fuer FileObject in Verbindung mit JavaScript benoetigt
149 	// - das braucht Informationen ueber Load/Abort/Error
150 	static sal_uIntPtr  RegisterStatusInfoId();
151 
152 	// if the mimetype says graphic/bitmap/gdimetafile then get the
153 	// graphic from the Any. Return says no errors
154 	static sal_Bool GetGraphicFromAny( const String& rMimeType,
155 								const ::com::sun::star::uno::Any & rValue,
156 								Graphic& rGrf );
157 
158 private:
159 				LinkManager( const LinkManager& );
160 				LinkManager& operator=( const LinkManager& );
161 };
162 
163 // Trenner im LinkName fuer die DDE-/File-/Grafik- Links
164 // (nur wer es braucht, um einen SvLinkName zusammenzubasteln)
165 const sal_Unicode cTokenSeperator = 0xFFFF;
166 
167 // erzeuge einen String fuer den SvLinkName. Fuer
168 // - DDE die ersten 3 Strings, (Server, Topic, Item)
169 // - File-/Grf-LinkNms die letzen 3 Strings (FileName, Bereich, Filter)
170 SFX2_DLLPUBLIC void MakeLnkName( String& rName,
171 				 const String* pType,		// kann auch 0 sein !!
172 				 const String& rFile,
173 				 const String& rLink,
174 				 const String* pFilter = 0 );
175 
176 }
177 
178 #endif
179 
180