summaryrefslogtreecommitdiff
path: root/include/svl/svdde.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'include/svl/svdde.hxx')
-rw-r--r--include/svl/svdde.hxx416
1 files changed, 416 insertions, 0 deletions
diff --git a/include/svl/svdde.hxx b/include/svl/svdde.hxx
new file mode 100644
index 000000000000..c8a08beffbb9
--- /dev/null
+++ b/include/svl/svdde.hxx
@@ -0,0 +1,416 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * 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 .
+ */
+
+#ifndef _SVDDE_HXX
+#define _SVDDE_HXX
+
+#include "svl/svldllapi.h"
+#include <sot/exchange.hxx>
+#include <tools/string.hxx>
+#include <tools/link.hxx>
+#include <vector>
+
+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;
+struct DdeDataImp;
+struct DdeImp;
+class DdeItemImp;
+struct Conversation;
+
+typedef ::std::vector< DdeService* > DdeServices;
+typedef ::std::vector< long > DdeFormats;
+typedef ::std::vector< Conversation* > ConvList;
+
+// -----------
+// - DdeData -
+// -----------
+
+class SVL_DLLPUBLIC DdeData
+{
+ friend class DdeInternal;
+ friend class DdeService;
+ friend class DdeConnection;
+ friend class DdeTransaction;
+ DdeDataImp* pImp;
+
+ SVL_DLLPRIVATE void Lock();
+
+ void SetFormat( sal_uLong nFmt );
+
+public:
+ DdeData();
+ DdeData( SAL_UNUSED_PARAMETER const void*, SAL_UNUSED_PARAMETER long, SAL_UNUSED_PARAMETER sal_uLong = FORMAT_STRING );
+ DdeData( SAL_UNUSED_PARAMETER 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 );
+};
+
+// ------------------
+// - 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;
+ bool bBusy;
+
+ DdeTransaction( DdeConnection&, SAL_UNUSED_PARAMETER const String&, SAL_UNUSED_PARAMETER long = 0 );
+
+public:
+ virtual ~DdeTransaction();
+
+ bool IsBusy() { return bBusy; }
+ const OUString 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&, SAL_UNUSED_PARAMETER 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;
+ std::vector<DdeTransaction*> aTransactions;
+ DdeString* pService;
+ DdeString* pTopic;
+ DdeImp* pImp;
+
+public:
+ DdeConnection( SAL_UNUSED_PARAMETER const String&, SAL_UNUSED_PARAMETER const String& );
+ ~DdeConnection();
+
+ long GetError();
+ long GetConvId();
+
+ static const std::vector<DdeConnection*>& 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( SAL_UNUSED_PARAMETER const String& );
+ DdeItem( const DdeItem& );
+ virtual ~DdeItem();
+
+ const OUString 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 OUString& 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;
+ OUString aItem;
+ std::vector<DdeItem*> aItems;
+ Link aConnectLink;
+ Link aDisconnectLink;
+ Link aGetLink;
+ Link aPutLink;
+ Link aExecLink;
+
+public:
+ DdeTopic( SAL_UNUSED_PARAMETER const OUString& );
+ virtual ~DdeTopic();
+
+ const OUString 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 OUString& GetCurItem() { return aItem; }
+ const std::vector<DdeItem*>& GetItems() const { 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 OUString& 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:
+ std::vector<DdeTopic*> aTopics;
+ DdeFormats aFormats;
+ DdeTopic* pSysTopic;
+ DdeString* pName;
+ ConvList* pConv;
+ short nStatus;
+
+ SVL_DLLPRIVATE sal_Bool HasCbFormat( sal_uInt16 );
+
+public:
+ DdeService( SAL_UNUSED_PARAMETER const String& );
+ virtual ~DdeService();
+
+ const OUString GetName() const;
+ short GetError() { return nStatus; }
+
+ static DdeServices& GetServices();
+ std::vector<DdeTopic*>& 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
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */