home *** CD-ROM | disk | FTP | other *** search
- /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
- *
- * The contents of this file are subject to the Netscape Public License
- * Version 1.0 (the "NPL"); you may not use this file except in
- * compliance with the NPL. You may obtain a copy of the NPL at
- * http://www.mozilla.org/NPL/
- *
- * Software distributed under the NPL is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
- * for the specific language governing rights and limitations under the
- * NPL.
- *
- * The Initial Developer of this code under the NPL is Netscape
- * Communications Corporation. Portions created by Netscape are
- * Copyright (C) 1998 Netscape Communications Corporation. All Rights
- * Reserved.
- */
-
- // CTalkSiteMgr and CTalkNav: implementation file
- //
- #include "stdafx.h"
-
- #ifdef EDITOR
- #ifdef _WIN32
-
- #include "Talk.h"
-
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
-
- ////////////////////////////////////////////////////////////////
- // Callback to find an instance of SiteManager
- //
- BOOL CALLBACK EXPORT FindSiteMgr( HWND hwnd, LPARAM lParam )
- {
- if ( 0x015DEAD0 == ::SendMessage( hwnd, WM_SITE_MANAGER, SM_QUERY_WINDOW, 0 ) )
- {
- // We found it quit enumerating
- *((BOOL*)lParam) = TRUE;
- return FALSE;
- }
- return TRUE;
- }
-
- // Called at app startup during InitInstance().
- // Return TRUE if we found sitemanager running
- BOOL FE_FindSiteMgr()
- {
- BOOL bRetVal = 0;
- EnumWindows( FindSiteMgr, LPARAM(&bRetVal) );
- return bRetVal;
- }
-
- /////////////////////////////////////////////////////////////////////////////
- // CTalkNav OLE Automation Server so SiteManager can invoke us
-
- IMPLEMENT_DYNCREATE(CTalkNav, CCmdTarget)
-
- CTalkNav::CTalkNav()
- {
- EnableAutomation();
-
- // To keep the application running as long as an OLE automation
- // object is active, the constructor calls AfxOleLockApp.
- AfxOleLockApp();
- }
-
- CTalkNav::~CTalkNav()
- {
- // To terminate the application when all objects created with
- // with OLE automation, the destructor calls AfxOleUnlockApp.
-
- AfxOleUnlockApp();
- }
-
-
- void CTalkNav::OnFinalRelease()
- {
- // When the last reference for an automation object is released
- // OnFinalRelease is called. The base class will automatically
- // deletes the object. Add additional cleanup required for your
- // object before calling the base class.
-
- CCmdTarget::OnFinalRelease();
- }
-
-
- BEGIN_MESSAGE_MAP(CTalkNav, CCmdTarget)
- //{{AFX_MSG_MAP(CTalkNav)
- // NOTE - the ClassWizard will add and remove mapping macros here.
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
-
- BEGIN_DISPATCH_MAP(CTalkNav, CCmdTarget)
- //{{AFX_DISPATCH_MAP(CTalkNav)
- DISP_FUNCTION(CTalkNav, "BrowseURL", BrowseURL, VT_I4, VTS_BSTR)
- DISP_FUNCTION(CTalkNav, "EditURL", EditURL, VT_I4, VTS_BSTR)
- //}}AFX_DISPATCH_MAP
- END_DISPATCH_MAP()
-
- // Note: we add support for IID_ITalkNav to support typesafe binding
- // from VBA. This IID must match the GUID that is attached to the
- // dispinterface in the .ODL file.
-
- // {E328732B-9DC9-11CF-92D0-004095E27A10}
- static const IID IID_ITalkNav =
- { 0xe328732b, 0x9dc9, 0x11cf, { 0x92, 0xd0, 0x0, 0x40, 0x95, 0xe2, 0x7a, 0x10 } };
-
- BEGIN_INTERFACE_MAP(CTalkNav, CCmdTarget)
- INTERFACE_PART(CTalkNav, IID_ITalkNav, Dispatch)
- END_INTERFACE_MAP()
-
- // {E328732C-9DC9-11CF-92D0-004095E27A10}
- IMPLEMENT_OLECREATE(CTalkNav, "Netscape.TalkNav.1", 0xe328732c, 0x9dc9, 0x11cf, 0x92, 0xd0, 0x0, 0x40, 0x95, 0xe2, 0x7a, 0x10)
-
- /////////////////////////////////////////////////////////////////////////////
- // CTalkNav message handlers
-
- long CTalkNav::BrowseURL(LPCTSTR url)
- {
- FE_LoadUrl( (char*)url, LOAD_URL_NAVIGATOR);
- return 1;
- }
-
- long CTalkNav::EditURL(LPCTSTR url)
- {
- FE_LoadUrl( (char*)url, LOAD_URL_COMPOSER);
- return 1;
- }
- ////////////////////////////////////////////////////////////
- //
- // Sitemanager has an OLE automation server that responds to this
- //
- /////////////////////////////////////////////////////////////////////////////
- // ITalkSMClient operations
-
- ITalkSMClient::ITalkSMClient(void) :
- m_alive(FALSE),
- m_connected(FALSE),
- m_retried(FALSE)
- {
- CLSID clsid;
- m_registered = 0;
- #if defined(MSVC4)
- USES_CONVERSION;
- LPCOLESTR pOleStr = A2CW("Netscape.TalkSiteMgr.1");
- #else
- const char * pOleStr[] = "Netscape.TalkSiteMgr.1";
- #endif
-
- if (S_OK == CLSIDFromProgID(pOleStr, &clsid))
- m_registered = 1;
- }
-
- ITalkSMClient::~ITalkSMClient(void)
- {
- Disconnect();
- }
-
- BOOL ITalkSMClient::Connect(void)
- {
- m_connected = CreateDispatch("Netscape.TalkSiteMgr.1");
- m_retried = FALSE;
- m_alive = m_connected;
- return m_connected;
- }
-
- void ITalkSMClient::Disconnect(void)
- {
- if (m_connected) ReleaseDispatch();
- m_connected = FALSE;
- }
-
- BOOL ITalkSMClient::Reconnect(void)
- {
- if (m_retried) return FALSE;
- Disconnect();
- Connect();
- m_retried = TRUE;
- return m_connected;
- }
-
- BOOL ITalkSMClient::IsConnected(void)
- {
- if (!m_registered) return FALSE;
- if (!m_connected) Connect();
- return m_connected;
- }
-
- long ITalkSMClient::LoadingURL(LPCTSTR url)
- {
- if (!m_alive) return 0;
- if (!IsConnected()) return 0;
-
- BOOL failed;
-
- Retry:
- long result = 0;
- static BYTE BASED_CODE parms[] = VTS_BSTR;
- TRY
- {
- failed = FALSE;
- InvokeHelper(0x1, DISPATCH_METHOD, VT_I4, (void*)&result, parms, url);
- }
- CATCH(CException, e)
- {
- failed = TRUE;
- }
- END_CATCH;
-
- if (!failed) return result;
- if (!Reconnect()) return 0;
- goto Retry;
- }
-
- long ITalkSMClient::SavedURL(LPCTSTR url)
- {
- if (!m_alive) return 0;
- if (!IsConnected()) return 0;
-
- BOOL failed;
-
- Retry:
- long result = 0;
- static BYTE BASED_CODE parms[] = VTS_BSTR;
- TRY
- {
- failed = FALSE;
- InvokeHelper(0x2, DISPATCH_METHOD, VT_I4, (void*)&result, parms, url);
- }
- CATCH(CException, e)
- {
- failed = TRUE;
- }
- END_CATCH;
-
- if (!failed) return result;
- if (!Reconnect()) return 0;
- goto Retry;
- }
-
- long ITalkSMClient::BecomeActive()
- {
- if (!IsConnected()) return 0;
-
- BOOL failed;
-
- Retry:
- long result = 0;
- TRY
- {
- failed = FALSE;
- InvokeHelper(0x3, DISPATCH_METHOD, VT_I4, (void*)&result, NULL);
- }
- CATCH(CException, e)
- {
- failed = TRUE;
- }
- END_CATCH;
-
- if (!failed) return result;
- if (!Reconnect()) return 0;
- goto Retry;
- }
-
- #endif // _WIN32
- #endif // EDITOR
-