blob: 6a444542a78deb4b663dbc509c3fad7cb8bc8fc3 [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 _SVDDE_HXX
#define _SVDDE_HXX
#include "svl/svldllapi.h"
#include <sot/exchange.hxx>
#include <tools/string.hxx>
#include <tools/list.hxx>
#include <tools/link.hxx>
class DdeString;
class DdeData;
class DdeConnection;
class DdeTransaction;
class DdeLink;
class DdeRequest;
class DdeWarmLink;
class DdeHotLink;
class DdePoke;
class DdeExecute;
class DdeItem;
class DdeTopic;
class DdeService;
class ConvList;
struct DdeDataImp;
struct DdeImp;
class DdeItemImp;
#ifndef _SVDDE_NOLISTS
DECLARE_LIST( DdeConnections, DdeConnection* )
DECLARE_LIST( DdeServices, DdeService* )
DECLARE_LIST( DdeTopics, DdeTopic* )
DECLARE_LIST( DdeItems, DdeItem* )
#else
typedef List DdeConnections;
typedef List DdeServices;
typedef List DdeTopics;
typedef List DdeItems;
#endif
//#if 0 // _SOLAR__PRIVATE
DECLARE_LIST( DdeTransactions, DdeTransaction* )
DECLARE_LIST( DdeFormats, long )
//#else
//typedef List DdeTransactions;
//typedef List DdeFormats;
//#endif
#ifndef STRING_LIST
#define STRING_LIST
DECLARE_LIST( StringList, String * )
#endif
// -----------
// - DdeData -
// -----------
class SVL_DLLPUBLIC DdeData
{
friend class DdeInternal;
friend class DdeService;
friend class DdeConnection;
friend class DdeTransaction;
DdeDataImp* pImp;
//#if 0 // _SOLAR__PRIVATE
SVL_DLLPRIVATE void Lock();
//#endif
void SetFormat( sal_uLong nFmt );
public:
DdeData();
DdeData( const void*, long, sal_uLong = FORMAT_STRING );
DdeData( const String& );
DdeData( const DdeData& );
~DdeData();
operator const void*() const;
operator long() const;
sal_uLong GetFormat() const;
DdeData& operator = ( const DdeData& );
static sal_uLong GetExternalFormat( sal_uLong nFmt );
static sal_uLong GetInternalFormat( sal_uLong nFmt );
};
// ------------------
// - DdeServiceList -
// ------------------
class DdeServiceList
{
StringList aServices;
public:
DdeServiceList( const String* = NULL );
~DdeServiceList();
StringList& GetServices() { return aServices; }
private:
DdeServiceList( const DdeServiceList& );
const DdeServiceList& operator= ( const DdeServiceList& );
};
// ----------------
// - DdeTopicList -
// ----------------
class DdeTopicList
{
StringList aTopics;
//#if 0 // _SOLAR__PRIVATE
DECL_LINK( Data, DdeData* );
//#endif
public:
DdeTopicList( const String& );
~DdeTopicList();
StringList& GetTopics() { return aTopics; }
};
// ------------------
// - DdeTransaction -
// ------------------
class SVL_DLLPUBLIC DdeTransaction
{
public:
virtual void Data( const DdeData* );
virtual void Done( sal_Bool bDataValid );
protected:
DdeConnection& rDde;
DdeData aDdeData;
DdeString* pName;
short nType;
long nId;
long nTime;
Link aData;
Link aDone;
sal_Bool bBusy;
DdeTransaction( DdeConnection&, const String&, long = 0 );
public:
virtual ~DdeTransaction();
sal_Bool IsBusy() { return bBusy; }
const String& GetName() const;
void Execute();
void SetDataHdl( const Link& rLink ) { aData = rLink; }
const Link& GetDataHdl() const { return aData; }
void SetDoneHdl( const Link& rLink ) { aDone = rLink; }
const Link& GetDoneHdl() const { return aDone; }
void SetFormat( sal_uLong nFmt ) { aDdeData.SetFormat( nFmt ); }
sal_uLong GetFormat() const { return aDdeData.GetFormat(); }
long GetError();
private:
friend class DdeInternal;
friend class DdeConnection;
DdeTransaction( const DdeTransaction& );
const DdeTransaction& operator= ( const DdeTransaction& );
};
// -----------
// - DdeLink -
// -----------
class SVL_DLLPUBLIC DdeLink : public DdeTransaction
{
Link aNotify;
public:
DdeLink( DdeConnection&, const String&, long = 0 );
virtual ~DdeLink();
void SetNotifyHdl( const Link& rLink ) { aNotify = rLink; }
const Link& GetNotifyHdl() const { return aNotify; }
virtual void Notify();
};
// ---------------
// - DdeWarmLink -
// ---------------
class SVL_DLLPUBLIC DdeWarmLink : public DdeLink
{
public:
DdeWarmLink( DdeConnection&, const String&, long = 0 );
};
// --------------
// - DdeHotLink -
// --------------
class SVL_DLLPUBLIC DdeHotLink : public DdeLink
{
public:
DdeHotLink( DdeConnection&, const String&, long = 0 );
};
// --------------
// - DdeRequest -
// --------------
class SVL_DLLPUBLIC DdeRequest : public DdeTransaction
{
public:
DdeRequest( DdeConnection&, const String&, long = 0 );
};
// -----------
// - DdePoke -
// -----------
class SVL_DLLPUBLIC DdePoke : public DdeTransaction
{
public:
DdePoke( DdeConnection&, const String&, const char*, long,
sal_uLong = FORMAT_STRING, long = 0 );
DdePoke( DdeConnection&, const String&, const DdeData&, long = 0 );
DdePoke( DdeConnection&, const String&, const String&, long = 0 );
};
// --------------
// - DdeExecute -
// --------------
class SVL_DLLPUBLIC DdeExecute : public DdeTransaction
{
public:
DdeExecute( DdeConnection&, const String&, long = 0 );
};
// -----------------
// - DdeConnection -
// -----------------
class SVL_DLLPUBLIC DdeConnection
{
friend class DdeInternal;
friend class DdeTransaction;
DdeTransactions aTransactions;
DdeString* pService;
DdeString* pTopic;
DdeImp* pImp;
public:
DdeConnection( const String&, const String& );
~DdeConnection();
long GetError();
long GetConvId();
static const DdeConnections& GetConnections();
sal_Bool IsConnected();
const String& GetServiceName();
const String& GetTopicName();
private:
DdeConnection( const DdeConnection& );
const DdeConnection& operator= ( const DdeConnection& );
};
// -----------
// - DdeItem -
// -----------
class SVL_DLLPUBLIC DdeItem
{
friend class DdeInternal;
friend class DdeTopic;
DdeString* pName;
DdeTopic* pMyTopic;
DdeItemImp* pImpData;
void IncMonitor( sal_uLong );
void DecMonitor( sal_uLong );
protected:
sal_uInt8 nType;
public:
DdeItem( const sal_Unicode* );
DdeItem( const String& );
DdeItem( const DdeItem& );
virtual ~DdeItem();
const String& GetName() const;
short GetLinks();
void NotifyClient();
};
// -----------
// - DdeItem -
// -----------
class SVL_DLLPUBLIC DdeGetPutItem : public DdeItem
{
public:
DdeGetPutItem( const sal_Unicode* p );
DdeGetPutItem( const String& rStr );
DdeGetPutItem( const DdeItem& rItem );
virtual DdeData* Get( sal_uLong );
virtual sal_Bool Put( const DdeData* );
virtual void AdviseLoop( sal_Bool ); // AdviseLoop starten/stoppen
};
// ------------
// - DdeTopic -
// ------------
class SVL_DLLPUBLIC DdeTopic
{
SVL_DLLPRIVATE void _Disconnect( long );
public:
virtual void Connect( long );
virtual void Disconnect( long );
virtual DdeData* Get( sal_uLong );
virtual sal_Bool Put( const DdeData* );
virtual sal_Bool Execute( const String* );
// evt. ein neues anlegen; return 0 -> es konnte nicht angelegt werden
virtual sal_Bool MakeItem( const String& rItem );
// es wird ein Warm-/Hot-Link eingerichtet. Return-Wert
// besagt ob es geklappt hat
virtual sal_Bool StartAdviseLoop();
virtual sal_Bool StopAdviseLoop();
private:
friend class DdeInternal;
friend class DdeService;
friend class DdeItem;
private:
DdeString* pName;
String aItem;
DdeItems aItems;
Link aConnectLink;
Link aDisconnectLink;
Link aGetLink;
Link aPutLink;
Link aExecLink;
public:
DdeTopic( const String& );
virtual ~DdeTopic();
const String& GetName() const;
long GetConvId();
void SetConnectHdl( const Link& rLink ) { aConnectLink = rLink; }
const Link& GetConnectHdl() const { return aConnectLink; }
void SetDisconnectHdl( const Link& rLink ) { aDisconnectLink = rLink; }
const Link& GetDisconnectHdl() const { return aDisconnectLink; }
void SetGetHdl( const Link& rLink ) { aGetLink = rLink; }
const Link& GetGetHdl() const { return aGetLink; }
void SetPutHdl( const Link& rLink ) { aPutLink = rLink; }
const Link& GetPutHdl() const { return aPutLink; }
void SetExecuteHdl( const Link& rLink ) { aExecLink = rLink; }
const Link& GetExecuteHdl() const { return aExecLink; }
void NotifyClient( const String& );
sal_Bool IsSystemTopic();
void InsertItem( DdeItem* ); // fuer eigene Ableitungen!
DdeItem* AddItem( const DdeItem& ); // werden kopiert !
void RemoveItem( const DdeItem& );
const String& GetCurItem() { return aItem; }
const DdeItems& GetItems() { return aItems; }
private:
DdeTopic( const DdeTopic& );
const DdeTopic& operator= ( const DdeTopic& );
};
// --------------
// - DdeService -
// --------------
class SVL_DLLPUBLIC DdeService
{
friend class DdeInternal;
public:
virtual sal_Bool IsBusy();
virtual String GetHelp();
// evt. ein neues anlegen; return 0 -> es konnte nicht angelegt werden
virtual sal_Bool MakeTopic( const String& rItem );
protected:
virtual String Topics();
virtual String Formats();
virtual String SysItems();
virtual String Status();
virtual String SysTopicGet( const String& );
virtual sal_Bool SysTopicExecute( const String* );
const DdeTopic* GetSysTopic() const { return pSysTopic; }
private:
DdeTopics aTopics;
DdeFormats aFormats;
DdeTopic* pSysTopic;
DdeString* pName;
ConvList* pConv;
short nStatus;
SVL_DLLPRIVATE sal_Bool HasCbFormat( sal_uInt16 );
public:
DdeService( const String& );
virtual ~DdeService();
const String& GetName() const;
short GetError() { return nStatus; }
static DdeServices& GetServices();
DdeTopics& GetTopics() { return aTopics; }
void AddTopic( const DdeTopic& );
void RemoveTopic( const DdeTopic& );
void AddFormat( sal_uLong );
void RemoveFormat( sal_uLong );
sal_Bool HasFormat( sal_uLong );
private:
// DdeService( const DdeService& );
//int operator= ( const DdeService& );
};
// ------------------
// - DdeTransaction -
// ------------------
inline long DdeTransaction::GetError()
{
return rDde.GetError();
}
#endif // _SVDDE_HXX