blob: 37578a0cb452c0af153e620b6154177485f2c749 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#ifndef _LINKMGR_HXX
#define _LINKMGR_HXX
#include "sal/config.h"
#include "sfx2/dllapi.h"
#include <sfx2/linksrc.hxx>
#include <tools/string.hxx>
#include <svl/svarray.hxx>
class SfxObjectShell;
class Graphic;
class Size;
namespace sfx2
{
// Damit der Link ueber den Status der zu ladenen Grafik informierten werden
// verschickt das FileObject ein SvData, mit der FormatId
// "RegisterStatusInfoId" und ein einem String als Datentraeger. Dieser
// enthaelt den folgenden enum.
class SvBaseLink;
class SvBaseLinkRef;
typedef SvBaseLinkRef* SvBaseLinkRefPtr;
SV_DECL_PTRARR( SvBaseLinks, SvBaseLinkRefPtr, 1, 1 )
typedef SvLinkSource* SvLinkSourcePtr;
SV_DECL_PTRARR( SvLinkSources, SvLinkSourcePtr, 1, 1 )
class SFX2_DLLPUBLIC LinkManager
{
SvBaseLinks aLinkTbl;
SvLinkSources aServerTbl;
SfxObjectShell *pPersist; // LinkMgr muss vor SfxObjectShell freigegeben werden
protected:
sal_Bool InsertLink( SvBaseLink* pLink, sal_uInt16 nObjType, sal_uInt16 nUpdateType,
const String* pName = 0 );
public:
enum LinkState
{
STATE_LOAD_OK,
STATE_LOAD_ERROR,
STATE_LOAD_ABORT
};
LinkManager( SfxObjectShell * pCacheCont );
~LinkManager();
SfxObjectShell* GetPersist() const { return pPersist; }
void SetPersist( SfxObjectShell * p ) { pPersist = p; }
void Remove( SvBaseLink *pLink );
void Remove( sal_uInt16 nPos, sal_uInt16 nCnt = 1 );
sal_Bool Insert( SvBaseLink* pLink );
// den Link mit einem SvLinkSource verbinden und in die Liste eintragen
sal_Bool InsertDDELink( SvBaseLink*,
const String& rServer,
const String& rTopic,
const String& rItem );
// falls am Link schon alles eingestellt ist !
sal_Bool InsertDDELink( SvBaseLink* );
// den Link mit einem PseudoObject verbinden und in die Liste eintragen
sal_Bool InsertFileLink( sfx2::SvBaseLink&,
sal_uInt16 nFileType,
const String& rTxt,
const String* pFilterNm = 0,
const String* pRange = 0 );
// falls am Link schon alles eingestellt ist !
sal_Bool InsertFileLink( sfx2::SvBaseLink& );
// erfrage die Strings fuer den Dialog
sal_Bool GetDisplayNames( const SvBaseLink *,
String* pType,
String* pFile = 0,
String* pLink = 0,
String* pFilter = 0 ) const;
SvLinkSourceRef CreateObj( SvBaseLink* );
void UpdateAllLinks( sal_Bool bAskUpdate = sal_True,
sal_Bool bCallErrHdl = sal_True,
sal_Bool bUpdateGrfLinks = sal_False,
Window* pParentWin = 0 );
// Liste aller Links erfragen (z.B. fuer Verknuepfungs-Dialog)
const SvBaseLinks& GetLinks() const { return aLinkTbl; }
// ----------------- Serverseitige Verwaltung --------------------
// Liste der zu serviereden Links erfragen
const SvLinkSources& GetServers() const { return aServerTbl; }
// einen zu servierenden Link eintragen/loeschen
sal_Bool InsertServer( SvLinkSource* rObj );
void RemoveServer( SvLinkSource* rObj );
void RemoveServer( sal_uInt16 nPos, sal_uInt16 nCnt = 1 )
{ aServerTbl.Remove( nPos, nCnt ); }
// eine Uebertragung wird abgebrochen, also alle DownloadMedien canceln
// (ist zur Zeit nur fuer die FileLinks interressant!)
void CancelTransfers();
// um Status Informationen aus dem FileObject an den BaseLink zu
// senden, gibt es eine eigene ClipBoardId. Das SvData-Object hat
// dann die entsprechenden Informationen als String.
// Wird zur Zeit fuer FileObject in Verbindung mit JavaScript benoetigt
// - das braucht Informationen ueber Load/Abort/Error
static sal_uIntPtr RegisterStatusInfoId();
// if the mimetype says graphic/bitmap/gdimetafile then get the
// graphic from the Any. Return says no errors
static sal_Bool GetGraphicFromAny( const String& rMimeType,
const ::com::sun::star::uno::Any & rValue,
Graphic& rGrf );
private:
LinkManager( const LinkManager& );
LinkManager& operator=( const LinkManager& );
};
// Trenner im LinkName fuer die DDE-/File-/Grafik- Links
// (nur wer es braucht, um einen SvLinkName zusammenzubasteln)
const sal_Unicode cTokenSeperator = 0xFFFF;
// erzeuge einen String fuer den SvLinkName. Fuer
// - DDE die ersten 3 Strings, (Server, Topic, Item)
// - File-/Grf-LinkNms die letzen 3 Strings (FileName, Bereich, Filter)
SFX2_DLLPUBLIC void MakeLnkName( String& rName,
const String* pType, // kann auch 0 sein !!
const String& rFile,
const String& rLink,
const String* pFilter = 0 );
}
#endif