cmd/winfe lives on in the MozillaClassic branch only. removing from the trunk. a=leaf@mozilla.org

git-svn-id: svn://10.0.0.236/trunk@51596 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
dmose%mozilla.org 1999-10-22 23:44:52 +00:00
parent 5b578df427
commit d924535fa1
927 changed files with 0 additions and 334423 deletions

View File

@ -1,18 +0,0 @@
#!gmake
#
# 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.
#

View File

@ -1,305 +0,0 @@
/* -*- 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.
*/
// TestCaseManager.cpp : implementation file
//
#include "stdafx.h"
#include "resource.h"
//#include "TestCaseManager.h"
#include "testcase.h"
#include "qa.h"
#include <stdlib.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
// To be used by Par's code
CTestCase QA_TestCase;
IMPLEMENT_SERIAL(CTCData, CObject, 0)
IMPLEMENT_SERIAL(CTestCaseManager, CObject, 0)
CTCData::CTCData()
{
m_strName = "";
m_strDesc = "";
m_nID = 0;
}
void CTCData::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
ar << m_strName;
ar << m_strDesc;
ar << (WORD)m_nID;
}
else
{
ar >> m_strName;
ar >> m_strDesc;
ar >> (WORD&)m_nID;
}
}
CTestCaseManager::CTestCaseManager()
{
m_iNumTestCases = 0;
m_iNumTestCasesToRun = 0;
m_sDataFile = CString("");
m_sDataPath = CString("");
m_sLogFile = CString("");
}
CTestCaseManager::~CTestCaseManager()
{
DeleteData();
}
void CTestCaseManager::Serialize(CArchive& ar)
{
CTCData* pTestCase;
int nI;
CObject::Serialize(ar);
if ( ar.IsStoring() )
{
ar << (WORD)m_TCData.GetSize();
for (nI = 0;nI < m_TCData.GetSize();nI++)
{
pTestCase = (CTCData*)m_TCData[nI];
ar << pTestCase;
}
}
else
{
WORD wSize;
ar >> wSize;
m_TCData.SetSize(wSize);
for (nI = 0;nI < m_TCData.GetSize();nI++)
{
ar >> pTestCase;
m_TCData.SetAt(nI,pTestCase);
}
}
}
void CTestCaseManager::AddTestCase(CTCData* pTestCase)
{
CTCData *pTCData;
int nI;
// put it in its place (acsending sorted order)
for (nI = 0;nI < m_TCData.GetSize();nI++)
{
pTCData = (CTCData*)m_TCData[nI];
if (pTCData->m_strName.Compare(pTestCase->m_strName) > 0)
break;
}
m_TCData.InsertAt(nI,pTestCase);
}
void CTestCaseManager::InitRun()
{
CFile fFile;
m_iNumPassed = 0;
m_iNumFailed = 0;
m_sLogFile = (CString)(m_sDataPath + "results.all");
// Delete the .all file
if (FileExists(m_sLogFile))
fFile.Remove(m_sLogFile);
fFile.Open(m_sLogFile,CFile::modeCreate | CFile::shareDenyNone);
fFile.Close();
}
// appends [str] to the Log File
void CTestCaseManager::PrintToFile(CString& str)
{
CStdioFile fFile;
if (fFile.Open(m_sLogFile,CFile::modeWrite | CFile::shareDenyNone))
{ // write to Testcase Log File
fFile.Seek(0, CFile::end);
fFile.WriteString(str + "\n");
fFile.Flush();
fFile.Close();
}
}
void CTestCaseManager::RemoveTestCases(LPINT m_TestCasesToRemove, int nNum)
{
CTCData* pTCData;
for (int nI = nNum-1 ; nI >= 0 ; nI--)
{
pTCData = (CTCData*)m_TCData[m_TestCasesToRemove[nI]];
delete pTCData;
m_TCData.RemoveAt(m_TestCasesToRemove[nI]);
}
}
void CTestCaseManager::DeleteData()
{
CTCData* pTCData;
int nI;
for (nI = 0;nI < m_TCData.GetSize();nI++)
{
pTCData = (CTCData*)m_TCData[nI];
delete pTCData;
}
m_TCData.RemoveAll();
}
void CTestCaseManager::SaveData()
{
CFile file;
if ( m_sDataFile == "" )
{
CFileDialog dlg(FALSE, NULL, NULL, NULL, "Testcase Data Files (*.dat)|*.dat|All Files (*.*)|*.*||");
if ( dlg.DoModal() == IDOK )
{
m_sDataFile = dlg.GetPathName();
if ( !FileExists(m_sDataFile) )
return;
}
}
if ( file.Open(m_sDataFile,CFile::modeCreate | CFile::modeWrite | CFile::shareDenyNone) )
{
CArchive saveArchive(&file, CArchive::store | CArchive::bNoFlushOnDelete);
Serialize(saveArchive);
saveArchive.Close();
file.Close();
}
}
void CTestCaseManager::LoadData()
{
CFileDialog dlg(TRUE, NULL, NULL, NULL, "Testcase Data Files (*.dat)|*.dat|All Files (*.*)|*.*||");
CString sFile;
CFile file;
if ( dlg.DoModal() == IDOK )
{
m_sDataFile = dlg.GetPathName();
if ( !FileExists(m_sDataFile) )
return;
// Save the path
int iSlantPos = m_sDataFile.ReverseFind('\\');
m_sDataPath = m_sDataFile.Left(iSlantPos+1); // get the slant too!
if ( file.Open(m_sDataFile,CFile::modeRead | CFile::shareDenyNone) )
{
DeleteData(); // delete data first
CArchive loadArchive(&file,CArchive::load | CArchive::bNoFlushOnDelete);
Serialize(loadArchive);
loadArchive.Close();
file.Close();
}
}
}
void CTestCaseManager::ExecuteTestCases(LPINT m_TestCasesToRun)
{
int index;
CTCData* pTCData;
CTestCaseManager *tc;
tc = this;
InitRun();
while (*m_TestCasesToRun != -1)
{
index = *m_TestCasesToRun;
pTCData = (CTCData*)m_TCData[index];
m_strName = pTCData->m_strName;
// Examine the following very closely - not a cast but a constructor
QA_TestCase = (CTestCase)(this); // formerly tc
switch (pTCData->m_nID)
{
case TEST1 : WhiteBox_DeleteMessage1(this); // formerly tc
break;
case TEST2 : TrialTestCase2(tc);
break;
}
while (QATestCaseDone == FALSE) {
FEU_StayingAlive();
}
Wrapup();
m_TestCasesToRun++;
}
DeleteData();
}
void CTestCaseManager::Wrapup()
{
CFile fFile;
// create the runflag file to talk to QAP
fFile.Open(m_sDataPath + "runflag.txt",CFile::modeCreate | CFile::shareDenyNone);
fFile.Close();
QA_TestCase.WrapUp();
}
BOOL CTestCaseManager::FileExists(CString& strPath)
{
CFileStatus status;
BOOL bFileExists = TRUE;
if ( !CFile::GetStatus(strPath,status) ) // static member
bFileExists = FALSE;
return bFileExists;
}

View File

@ -1,75 +0,0 @@
/* -*- 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.
*/
class CTCData : public CObject
{
public:
CTCData();
DECLARE_SERIAL(CTCData);
virtual void Serialize(CArchive& ar);
// testcase Data
CString m_strName;
CString m_strDesc;
int m_nID;
};
class CTestCaseManager : public CObject
{
public:
CTestCaseManager();
~CTestCaseManager();
DECLARE_SERIAL(CTestCaseManager);
virtual void Serialize(CArchive& ar);
void ExecuteTestCases(LPINT m_TestCasesToRun);
void RemoveTestCases(LPINT m_TestCasesToRemove, int nNum);
void AddTestCase(CTCData *pTestCase);
void SaveData();
void LoadData();
void DeleteData();
void Wrapup();
void InitRun();
void PrintToFile(CString& str);
BOOL FileExists(CString& strPath);
CString m_sDataFile;
CString m_sDataPath;
CPtrArray m_TCData;
UINT m_iNumTestCasesToRun;
UINT m_iNumPassed;
UINT m_iNumFailed;
CString GetTestCaseName() { return m_strName; }
private:
UINT m_iNumTestCases;
CString m_strName;
CString m_sLogFile;
};

View File

@ -1,227 +0,0 @@
/* -*- 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.
*/
// TestcaseDlg.cpp : implementation file
//
#include "stdafx.h"
#include "genframe.h"
#include "TestcaseDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CWhiteBoxDlg dialog
CWhiteBoxDlg::CWhiteBoxDlg(CWnd* pParent /*=NULL*/)
: CDialog(CWhiteBoxDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CWhiteBoxDlg)
//}}AFX_DATA_INIT
}
CWhiteBoxDlg::~CWhiteBoxDlg()
{
}
void CWhiteBoxDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CWhiteBoxDlg)
DDX_Control(pDX, IDC_LIST, m_list);
DDX_Control(pDX, IDC_DELETE, m_delete);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CWhiteBoxDlg, CDialog)
//{{AFX_MSG_MAP(CWhiteBoxDlg)
ON_BN_CLICKED(IDC_ADD, OnAdd)
ON_BN_CLICKED(IDC_DELETE, OnDelete)
ON_BN_CLICKED(IDC_RUN, OnRun)
ON_BN_CLICKED(IDC_SAVE, OnSave)
ON_BN_CLICKED(IDC_IMPORT, OnImport)
ON_LBN_SELCHANGE(IDC_LIST, OnSelChangeList)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CWhiteBoxDlg message handlers
BOOL CWhiteBoxDlg::OnInitDialog()
{
CString text;
CDialog::OnInitDialog();
ListTestCases();
return TRUE; // return TRUE unless you set the focus to a control
}
void CWhiteBoxDlg::OnAdd()
{
CTCData* pTestCase = new CTCData;
CString str;
GetDlgItem(IDC_NAME)->GetWindowText(pTestCase->m_strName);
GetDlgItem(IDC_DESC)->GetWindowText(pTestCase->m_strDesc);
GetDlgItem(IDC_ID)->GetWindowText(str);
//convert!
pTestCase->m_nID = atoi((LPCSTR)str);
m_tcManager.AddTestCase(pTestCase);
ListTestCases();
// Reset the text boxes
GetDlgItem(IDC_NAME)->SetWindowText("");
GetDlgItem(IDC_DESC)->SetWindowText("");
GetDlgItem(IDC_ID)->SetWindowText("0");
//GetDlgItem(IDC_NAME)->SetFocus();
UpdateData(FALSE);
}
void CWhiteBoxDlg::OnDelete()
{
LPINT m_TestCasesToRemove;
int nWhich, nNumSelected;
nNumSelected = m_list.GetSelCount();
if (nNumSelected != 0)
{
m_TestCasesToRemove = (LPINT)calloc(sizeof(int),nNumSelected);
m_list.GetSelItems(nNumSelected,m_TestCasesToRemove);
// append -1 to the end
//m_TestCasesToRemove[nNumSelected] = -1;
m_tcManager.RemoveTestCases(m_TestCasesToRemove, nNumSelected);
free(m_TestCasesToRemove);
}
ListTestCases();
/* if ( (nWhich = m_list.GetCurSel()) != LB_ERR )
{
nTestCase = m_list.GetItemData(nWhich);
pTCData = (CTCData*)m_tcManager.m_TCData[nTestCase];
delete pTCData;
m_tcManager.RemoveTestCase(nTestCase);
}
*/
// Set cursor
if (nWhich+1 <= m_list.GetCount())
m_list.SetAnchorIndex(nWhich+1);
else
if (nWhich != 0)
m_list.SetAnchorIndex(nWhich);
else
m_delete.EnableWindow(FALSE);
}
void CWhiteBoxDlg::OnRun()
{
LPINT m_TestCasesToRun;
int nNumSelected = m_list.GetSelCount();
if (nNumSelected != 0)
{
m_TestCasesToRun = (LPINT)calloc(sizeof(int),nNumSelected + 1);
m_tcManager.m_iNumTestCasesToRun = m_list.GetSelItems(nNumSelected,m_TestCasesToRun);
// append -1 to the end
m_TestCasesToRun[m_tcManager.m_iNumTestCasesToRun] = -1;
CDialog::OnOK();
m_tcManager.ExecuteTestCases(m_TestCasesToRun);
free(m_TestCasesToRun);
}
}
void CWhiteBoxDlg::OnImport()
{
m_tcManager.LoadData();
ListTestCases();
}
void CWhiteBoxDlg::OnSelChangeList()
{
// enable the delete button now that an item has been selected
m_delete.EnableWindow(TRUE);
}
// Saves Data And Exits
void CWhiteBoxDlg::OnSave()
{
// TODO: Add extra validation here
m_tcManager.SaveData();
}
void CWhiteBoxDlg::ListTestCases()
{
CTCData* pTCData;
CString tmpstr, strTestCase;
int nI;
CListBox* pListBox = (CListBox*)GetDlgItem(IDC_LIST);
pListBox->ResetContent();
for (nI = 0;nI < m_tcManager.m_TCData.GetSize();nI++)
{
pTCData = (CTCData*)m_tcManager.m_TCData[nI];
tmpstr.Format("%d",pTCData->m_nID);
strTestCase = pTCData->m_strName + "\t" + pTCData->m_strDesc + "\t" + tmpstr;
m_list.AddString(strTestCase);
//nWhich = pListBox->AddString(strTestCase);
//pListBox->SetItemData(nWhich,nI);
/*
bSelect = FALSE;
for (nJ = 0;nJ < m_pCourse->m_Students.GetSize();nJ++)
{
if ( m_pCourse->m_Students[nJ] == (DWORD)nI )
{
bSelect = TRUE;
break;
}
}
if ( bSelect )
pListBox->SetSel(nWhich,TRUE);
*/
}
}

View File

@ -1,61 +0,0 @@
/* -*- 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.
*/
// TabStopDlg.h : header file
//
/////////////////////////////////////////////////////////////////////////////
// CWhiteBoxDlg dialog
#include "tclist.h"
#include "TestCaseManager.h"
class CWhiteBoxDlg : public CDialog
{
// Construction
public:
CWhiteBoxDlg(CWnd* pParent = NULL); // standard constructor
~CWhiteBoxDlg();
// Dialog Data
//{{AFX_DATA(CWhiteBoxDlg)
enum { IDD = IDD_QA_DIALOG };
CTCList m_list;
CButton m_delete;
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CWhiteBoxDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
CTestCaseManager m_tcManager;
void ListTestCases();
protected:
// Generated message map functions
//{{AFX_MSG(CWhiteBoxDlg)
virtual BOOL OnInitDialog();
afx_msg void OnAdd();
afx_msg void OnDelete();
afx_msg void OnRun();
afx_msg void OnSelChangeList();
afx_msg void OnSave();
afx_msg void OnImport();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};

View File

@ -1,297 +0,0 @@
/* -*- 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.
*/
//
// This is a header file for the Address Book API support within
// Communicator.
//
// Written by: Rich Pizzarro (rhp@netscape.com)
//
#ifndef __ABAPI
#define __ABAPI
#include "nabapi.h" // for all address book defines
// These are very important for compatibility going forward...
#define NAB_VERSION_MAJOR 1 /* Major version number; changes with major code release number */
#define NAB_VERSION_MINOR 0 /* Minor version number; changes with point release number. */
#ifdef WIN16
typedef unsigned char UCHAR;
#endif
#define MAX_NAME_LEN 256
#define MAX_ADDRBOOK_NAME_LEN 512
#define MAX_CON 4 // Maximum NABAPI sessions supported
#define MAX_POINTERS 32
#define MAX_LDIF_SIZE 16000 // Max size for address book LDIF allocation stuff
#define MAX_LDIFSEARCH_SIZE 4096 // Max size for address book LDIF allocation stuff
#ifndef NABAPIDLL
#include "abcom.h" // For MSG_ & AB_ stuff...
#include "msgcom.h"
//
// The Address Book class that will act as the internal mechanism for
// Communicator to control multiple Address Book sessions.
//
class CNABConnection
{
protected:
LONG m_ID;
BOOL m_defaultConnection;
LONG m_sessionCount;
LONG m_nameIndex;
LONG m_nameTotalCount;
// Methods
public:
MSG_Pane *m_ContainerPane; // Container Pane...
AB_ContainerInfo **m_ContainerArray; // The array of container info pointers...
LONG m_ContainerArrayCount; // The count of the number of
// m_ContainerArray entries
MSG_Pane *m_AddressBookPane; // Container info for a particular addr book
CNABConnection ( LONG );
~CNABConnection ( );
// ID related methods
LONG GetID( ) { return m_ID; } ;
// Dealing with the default session...
BOOL IsDefault( ) { return m_defaultConnection; } ;
void SetDefault( BOOL flag ) { m_defaultConnection = flag; } ;
// For handling multiple sessions on a profile name...
LONG GetSessionCount( ) { return m_sessionCount; } ;
void IncrementSessionCount() { ++m_sessionCount; } ;
void DecrementSessionCount() { --m_sessionCount; } ;
// For enumerating names...
void SetNameIndex( LONG mIndex ) { m_nameIndex = mIndex; } ;
void IncrementNameIndex( ) { ++m_nameIndex; } ;
LONG GetNameIndex( ) { return m_nameIndex; };
void SetNameTotalCount( LONG mTotal ) { m_nameTotalCount = mTotal; } ;
LONG GetNameTotalCount( ) { return m_nameTotalCount; };
// For AB Calls...
BOOL RefreshABContainerList ( void );
AB_ContainerInfo *FindContainerInfo( LPSTR, LPSTR );
};
#endif // NABAPIDLL
//
// Defines needed for requests being made with the WM_COPYDATA call...
//
typedef enum {
NSCP_NABStartRequestID = 200,
NSCP_NAB_Open,
NSCP_NAB_Close,
NSCP_NAB_GetAddressBookList,
NSCP_NAB_GetDefaultAddressBook,
NSCP_NAB_CreatePersonalAddressBook,
NSCP_NAB_FreeMemory,
NSCP_NAB_SaveAddressBookToHTML,
NSCP_NAB_ImportLDIFFile,
NSCP_NAB_ExportLDIFFile,
NSCP_NAB_GetFirstAddressBookEntry,
NSCP_NAB_GetNextAddressBookEntry,
NSCP_NAB_FindAddressBookEntry,
NSCP_NAB_InsertAddressBookEntry,
NSCP_NAB_UpdateAddressBookEntry,
NSCP_NAB_DeleteAddressBookEntry,
NSCP_NABEndRequestID // Note: this is a marker for NAB IPC requests
} NSCP_NAB_IPC_REQUEST;
//
// This is to keep track of the pointers allocated in the MAPI DLL
// and deal with them correctly.
//
#define NAB_FLAT_MEMORY 0
#define NAB_ADDRBOOK_STRUCT 1
typedef struct {
LPVOID lpMem;
char memType;
} nabMemTrackerType;
//
// This is the generic message that WM_COPYDATA will send to the
// Communicator product to allow it to attach to shared memory.
// NOTE: On Win16, this will simply reference a pointer.
//
typedef struct {
char smemName[64]; // Name of shared memory
DWORD smemSize; // Size of shared memory
LPVOID lpsmem; // Will be really used in Win16 only
} NABIPCType;
//
// These are message specific structures that will be used for
// the various Address Book operations.
//
typedef struct {
DWORD ipcWorked; // Necessary for IPC check with Communicator
NABConnectionID abConnection;
UINT_16 majorVerNumber;
UINT_16 minorVerNumber;
} NAB_OpenType;
typedef struct {
DWORD ipcWorked; // Necessary for IPC check with Communicator
NABConnectionID abConnection;
} NAB_CloseType;
typedef struct {
DWORD ipcWorked; // Necessary for IPC check with Communicator
NABConnectionID abConnection;
UINT_32 abookCount;
char blobFileName[_MAX_PATH]; // file name N abooks on disk
} NAB_GetAddressBookListType;
typedef struct {
DWORD ipcWorked; // Necessary for IPC check with Communicator
NABConnectionID abConnection;
BOOL defaultFound;
// NABAddrBookDescType flattened
char reserved[16]; // future use
char abookDesc[MAX_ADDRBOOK_NAME_LEN]; // description of address book
char abookFileName[_MAX_PATH]; // file name of abooks on disk
} NAB_GetDefaultAddressBookType;
typedef struct {
DWORD ipcWorked; // Necessary for IPC check with Communicator
NABConnectionID abConnection;
// NABAddrBookDescType flattened
char reserved[16]; // future use
char abookName[MAX_ADDRBOOK_NAME_LEN]; // description of address book
char abookFileName[_MAX_PATH]; // file name of abooks on disk
} NAB_CreatePersonalAddressBookType;
typedef struct {
DWORD ipcWorked; // Necessary for IPC check with Communicator
NABConnectionID abConnection;
// NABAddrBookDescType flattened
char reserved[16]; // future use
char abookName[MAX_ADDRBOOK_NAME_LEN]; // description of address book
char abookFileName[_MAX_PATH]; // file name of abooks on disk
// Return stuff
char HTMLFileName[_MAX_PATH]; // saved HTML file name
} NAB_SaveAddressBookToHTMLType;
typedef struct {
DWORD ipcWorked; // Necessary for IPC check with Communicator
NABConnectionID abConnection;
BOOL deleteImportFile;
char LDIFFileName[_MAX_PATH]; // LDIF file to import
// NABAddrBookDescType flattened
char reserved[16]; // future use
char abookName[MAX_ADDRBOOK_NAME_LEN]; // description of address book
char abookFileName[_MAX_PATH]; // file name of abooks on disk
} NAB_ImportLDIFFileType;
typedef struct {
DWORD ipcWorked; // Necessary for IPC check with Communicator
NABConnectionID abConnection;
char LDIFFileName[_MAX_PATH]; // LDIF file to export
// NABAddrBookDescType flattened
char reserved[16]; // future use
char abookName[MAX_ADDRBOOK_NAME_LEN]; // description of address book
char abookFileName[_MAX_PATH]; // file name of abooks on disk
} NAB_ExportLDIFFileType;
typedef struct {
DWORD ipcWorked; // Necessary for IPC check with Communicator
NABConnectionID abConnection;
// NABAddrBookDescType flattened
char reserved[16]; // future use
char abookName[MAX_ADDRBOOK_NAME_LEN]; // description of address book
char abookFileName[_MAX_PATH]; // file name of abooks on disk
// Returned Values
NABUserID userID;
NABUpdateTime updateTime;
char userInfo[MAX_LDIF_SIZE];
} NAB_GetFirstAddressBookEntryType;
typedef struct {
DWORD ipcWorked; // Necessary for IPC check with Communicator
NABConnectionID abConnection;
// NABAddrBookDescType flattened
char reserved[16]; // future use
// Returned Values
NABUserID userID;
NABUpdateTime updateTime;
char userInfo[MAX_LDIF_SIZE];
} NAB_GetNextAddressBookEntryType;
typedef struct {
DWORD ipcWorked; // Necessary for IPC check with Communicator
NABConnectionID abConnection;
// NABAddrBookDescType flattened
char reserved[16]; // future use
char abookName[MAX_ADDRBOOK_NAME_LEN]; // description of address book
char abookFileName[_MAX_PATH]; // file name of abooks on disk
// Input Values
char ldifSearchAttribute[MAX_LDIFSEARCH_SIZE];
// Output values
NABUserID userID;
NABUpdateTime updateTime;
char userInfo[MAX_LDIF_SIZE];
} NAB_FindAddressBookEntryType;
typedef struct {
DWORD ipcWorked; // Necessary for IPC check with Communicator
NABConnectionID abConnection;
// NABAddrBookDescType flattened
char reserved[16]; // future use
char abookName[MAX_ADDRBOOK_NAME_LEN]; // description of address book
char abookFileName[_MAX_PATH]; // file name of abooks on disk
// Insert Value
char userInfo[MAX_LDIF_SIZE];
// Update Value
NABUserID userID;
} NAB_InsertAddressBookEntryType;
typedef struct {
DWORD ipcWorked; // Necessary for IPC check with Communicator
NABConnectionID abConnection;
// NABAddrBookDescType flattened
char reserved[16]; // future use
char abookName[MAX_ADDRBOOK_NAME_LEN]; // description of address book
char abookFileName[_MAX_PATH]; // file name of abooks on disk
// Update Value
NABUserID userID;
char userInfo[MAX_LDIF_SIZE];
} NAB_UpdateAddressBookEntryType;
typedef struct {
DWORD ipcWorked; // Necessary for IPC check with Communicator
NABConnectionID abConnection;
// NABAddrBookDescType flattened
char reserved[16]; // future use
char abookName[MAX_ADDRBOOK_NAME_LEN]; // description of address book
char abookFileName[_MAX_PATH]; // file name of abooks on disk
// Delete user Value
NABUserID userID;
} NAB_DeleteAddressBookEntryType;
#endif // __ABAPI

File diff suppressed because it is too large Load Diff

View File

@ -1,29 +0,0 @@
/* -*- 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.
*/
#ifndef _NAB_HOOK_H_
#define _NAB_HOOK_H_
//#include <structs.h> // for MWContext
//
// This is the entry point to the MAPI session manager that lives
// inside of Communicator.
//
LONG ProcessNetscapeNABHook(WPARAM wParam, LPARAM lParam);
#endif // _NAB_HOOK_H_

File diff suppressed because it is too large Load Diff

View File

@ -1,336 +0,0 @@
/* -*- 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.
*/
#include "addrfrm.h"
#ifdef MOZ_NEWADDR
#ifndef _abmldlg_h_
#define _abmldlg_h_
// ABMLDLG.H
//
// DESCRIPTION:
// This file contains the declarations of the for the mailing list
// dialog
//
#include "apimsg.h"
#include "xp_core.h"
#include "addrbook.h"
#include "property.h"
#include "apiaddr.h"
#include "mnrccln.h"
#include "statbar.h"
class CNSAddressList;
class CABMLDialog;
class CABMLDialogEntryList;
class CMailListDropTarget : public COleDropTarget
{
public:
CABMLDialog* m_pOwner;
//Construction
CMailListDropTarget(CABMLDialog* pOwner) { m_pOwner = pOwner; }
BOOL OnDrop(CWnd *, COleDataObject *, DROPEFFECT, CPoint);
DROPEFFECT OnDragOver(CWnd *, COleDataObject *, DWORD, CPoint);
};
/****************************************************************************
*
* Class: CABMLDialog
*
* DESCRIPTION:
* This class is the address picker from the compose window
*
****************************************************************************/
class CABMLDialog : public CDialog,
public IAddressParent {
// Attributes
public:
friend class CABMLDialogEntryList;
// Dialog Data
//{{AFX_DATA(CABMLDialog)
enum { IDD = IDD_ADDRESS_LIST };
CString m_description;
CString m_name;
CString m_nickname;
//}}AFX_DATA
protected:
CNetscapeStatusBar m_barStatus;
LPADDRESSCONTROL m_pIAddressList;
LPUNKNOWN m_pUnkAddress;
int m_iMysticPlane;
HFONT m_pFont;
LPMSGLIST m_pIAddrList;
MLPane *m_addrBookPane;
DIR_Server *m_dir;
ABID m_entryID;
BOOL m_addingEntries;
BOOL m_saved;
int m_errorCode;
BOOL m_changingEntry;
BOOL m_addingEntry;
BOOL m_deletingEntry;
MSG_Pane *m_pPane;
CMailListDropTarget *m_pDropTarget;
// Support loading resources from dll
CMailNewsResourceSwitcher m_MailNewsResourceSwitcher;
// Support for IMsgList Interface (Called by CABMLDialogEntryList)
virtual void ListChangeStarting( MSG_Pane* pane, XP_Bool asynchronous,
MSG_NOTIFY_CODE notify, MSG_ViewIndex where,
int32 num);
virtual void ListChangeFinished( MSG_Pane* pane, XP_Bool asynchronous,
MSG_NOTIFY_CODE notify, MSG_ViewIndex where,
int32 num);
void CleanupOnClose();
void AddEntriesToList(int index, int num);
// IAddressParent stuff
virtual void AddedItem (HWND hwnd, LONG id,int index);
virtual int ChangedItem (char * pString, int index, HWND hwnd, char** ppFullName, unsigned long* entryID, UINT* bitmapID);
virtual void DeletedItem (HWND hwnd, LONG id,int index);
void PrintItems(LPSTR comment);
virtual char * NameCompletion (char *);
virtual void StartNameCompletionSearch();
virtual void StopNameCompletionSearch();
virtual void SetProgressBarPercent(int32 lPercent);
virtual void SetStatusText(const char* pMessage );
virtual CWnd *GetOwnerWindow();
// Operations
public:
CABMLDialog(CWnd* pParent = NULL, MSG_Pane *pane = NULL, MWContext* context = NULL);
~CABMLDialog();
BOOL Create( LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL );
BOOL Create( UINT nIDTemplate, CWnd* pParentWnd = NULL );
BOOL Create( CWnd *pParent );
enum { ToolInvalid = -1, ToolText = 0, ToolPictures = 1, ToolBoth = 2 };
static void HandleErrorReturn(int errorID, CWnd* parent = NULL);
MLPane* GetPane() { return m_addrBookPane; }
ABID GetEntryID() { return m_entryID; }
CNSAddressList * GetAddressWidget();
void DoUpdateAddressBook( CCmdUI* pCmdUI, AB_CommandType cmd, BOOL bUseCheck = TRUE );
// Drop
BOOL IsDragInListBox(CPoint *pPoint);
BOOL ProcessVCardData(COleDataObject * pDataObject,CPoint &point);
BOOL ProcessAddressBookIndexFormat(COleDataObject *pDataObject, DROPEFFECT effect);
DROPEFFECT GetAddressBookIndexFormatDropEffect(COleDataObject *pDataObject);
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CABMLDialog)
public:
virtual BOOL OnInitDialog( );
BOOL PreTranslateMessage( MSG* pMsg );
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
virtual void PostNcDestroy( );
//}}AFX_VIRTUAL
// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(CABMLDialog)
afx_msg int OnCreate( LPCREATESTRUCT );
afx_msg void OnDestroy( );
afx_msg void OnOK();
afx_msg void OnCancel();
afx_msg void OnRemoveEntry();
afx_msg void OnHelp();
afx_msg void OnUpdateOnlineStatus(CCmdUI *pCmdUI);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
#endif
#else // MOZ_NEWADDR
#ifndef _abmldlg_h_
#define _abmldlg_h_
// ABMLDLG.H
//
// DESCRIPTION:
// This file contains the declarations of the for the mailing list
// dialog
//
#include "apimsg.h"
#include "xp_core.h"
#include "addrbook.h"
#include "property.h"
#include "apiaddr.h"
#include "mnrccln.h"
class CNSAddressList;
class CABMLDialog;
class CABMLDialogEntryList;
class CMailListDropTarget : public COleDropTarget
{
public:
CABMLDialog* m_pOwner;
//Construction
CMailListDropTarget(CABMLDialog* pOwner) { m_pOwner = pOwner; }
BOOL OnDrop(CWnd *, COleDataObject *, DROPEFFECT, CPoint);
DROPEFFECT OnDragOver(CWnd *, COleDataObject *, DWORD, CPoint);
};
/****************************************************************************
*
* Class: CABMLDialog
*
* DESCRIPTION:
* This class is the address picker from the compose window
*
****************************************************************************/
class CABMLDialog : public CDialog,
public IAddressParent {
// Attributes
public:
friend class CABMLDialogEntryList;
// Dialog Data
//{{AFX_DATA(CABMLDialog)
enum { IDD = IDD_ADDRESS_LIST };
CString m_description;
CString m_name;
CString m_nickname;
//}}AFX_DATA
protected:
LPADDRESSCONTROL m_pIAddressList;
LPUNKNOWN m_pUnkAddress;
int m_iMysticPlane;
HFONT m_pFont;
LPMSGLIST m_pIAddrList;
MLPane *m_addrBookPane;
DIR_Server *m_dir;
ABID m_entryID;
BOOL m_addingEntries;
BOOL m_saved;
int m_errorCode;
BOOL m_changingEntry;
CMailListDropTarget *m_pDropTarget;
// Support loading resources from dll
CMailNewsResourceSwitcher m_MailNewsResourceSwitcher;
// Support for IMsgList Interface (Called by CABMLDialogEntryList)
virtual void ListChangeStarting( MSG_Pane* pane, XP_Bool asynchronous,
MSG_NOTIFY_CODE notify, MSG_ViewIndex where,
int32 num);
virtual void ListChangeFinished( MSG_Pane* pane, XP_Bool asynchronous,
MSG_NOTIFY_CODE notify, MSG_ViewIndex where,
int32 num);
void CleanupOnClose();
void AddEntriesToList(int index, int num);
// IAddressParent stuff
virtual void AddedItem (HWND hwnd, LONG id,int index);
virtual int ChangedItem (char * pString, int index, HWND hwnd, char** ppFullName, unsigned long* entryID, UINT* bitmapID);
virtual void DeletedItem (HWND hwnd, LONG id,int index);
virtual char * NameCompletion (char *);
virtual void StartNameCompletionSearch(){;}
virtual void StopNameCompletionSearch(){;}
virtual void SetProgressBarPercent(int32 lPercent){;}
virtual void SetStatusText(const char* pMessage ){;}
virtual CWnd *GetOwnerWindow(){return NULL;}
// Operations
public:
CABMLDialog(DIR_Server* dir, CWnd* pParent = NULL, ABID listID = NULL, MWContext* context = NULL);
~CABMLDialog();
BOOL Create( LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL );
BOOL Create( UINT nIDTemplate, CWnd* pParentWnd = NULL );
BOOL Create( CWnd *pParent );
enum { ToolInvalid = -1, ToolText = 0, ToolPictures = 1, ToolBoth = 2 };
static void HandleErrorReturn(int errorID, CWnd* parent = NULL);
MLPane* GetPane() { return m_addrBookPane; }
ABID GetEntryID() { return m_entryID; }
CNSAddressList * GetAddressWidget();
void DoUpdateAddressBook( CCmdUI* pCmdUI, AB_CommandType cmd, BOOL bUseCheck = TRUE );
// Drop
BOOL IsDragInListBox(CPoint *pPoint);
BOOL ProcessVCardData(COleDataObject * pDataObject,CPoint &point);
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CABMLDialog)
public:
virtual BOOL OnInitDialog( );
BOOL PreTranslateMessage( MSG* pMsg );
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
virtual void PostNcDestroy( );
//}}AFX_VIRTUAL
// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(CABMLDialog)
afx_msg int OnCreate( LPCREATESTRUCT );
afx_msg void OnDestroy( );
afx_msg void OnOK();
afx_msg void OnCancel();
afx_msg void OnRemoveEntry();
afx_msg void OnHelp();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
#endif
#endif // MOZ_NEWADDR

View File

@ -1,700 +0,0 @@
/* -*- 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.
*/
//
// Address Book API Utility Functions
// Written by: Rich Pizzarro (rhp@netscape.com)
// March 1998
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/stat.h>
#include "wfemsg.h" // for WFE_MSGGetMaster()
#include "nsstrseq.h"
#include "abapi.h"
#include "abhook.h"
#include "nabapi.h"
#include "mapismem.h"
#include "hiddenfr.h"
#include "msgcom.h"
#include "abutils.h"
#include "abcom.h"
extern CNetscapeApp theApp;
typedef struct {
BOOL foundInSearch;
int attribType;
AB_AttribID attribID;
char *ldifName;
} attribPairsType;
// I18N: Please don't touch these strings!
#define ATTRIB_COUNT 19
attribPairsType attribArray[] = {
// FALSE, dn: cn=first last,mail=email
FALSE, CHAR_VALUE, AB_attribDisplayName, /*AB_attribFullName,*/ "cn: ",
FALSE, CHAR_VALUE, AB_attribFamilyName, "sn: ",
FALSE, CHAR_VALUE, AB_attribGivenName, "givenname: ",
// FALSE, CHAR_VALUE, "top", "objectclass: ",
// FALSE, CHAR_VALUE, "person", "objectclass: ",
FALSE, CHAR_VALUE, AB_attribInfo, "description: ",
FALSE, CHAR_VALUE, AB_attribLocality, "locality: ",
FALSE, CHAR_VALUE, AB_attribRegion, "st: ",
FALSE, CHAR_VALUE, AB_attribEmailAddress, "mail: ",
FALSE, CHAR_VALUE, AB_attribTitle, "title: ",
FALSE, CHAR_VALUE, AB_attribPOAddress, "postOfficeBox: ",
FALSE, CHAR_VALUE, AB_attribStreetAddress, "streetaddress: ",
FALSE, CHAR_VALUE, AB_attribZipCode, "postalcode: ",
FALSE, CHAR_VALUE, AB_attribCountry, "countryname: ",
FALSE, CHAR_VALUE, AB_attribWorkPhone, "telephonenumber: ",
FALSE, CHAR_VALUE, AB_attribFaxPhone, "facsimiletelephonenumber: ",
FALSE, CHAR_VALUE, AB_attribHomePhone, "homephone: ",
FALSE, CHAR_VALUE, AB_attribCompanyName, "o: ",
FALSE, CHAR_VALUE, AB_attribNickName, "xmozillanickname: ",
FALSE, BOOL_VALUE, AB_attribHTMLMail, "xmozillausehtmlmail: ",
FALSE, INT_VALUE, AB_attribUseServer, "xmozillauseconferenceserver: "};
BOOL
TackOnAttributeValuePair(MSG_Pane *abPane, LONG userIndex,
LPSTR outString, AB_AttribID attribID, LPSTR stringKey,
DWORD typeOfValue, LPSTR concatString)
{
int result;
AB_AttributeValue *value;
if (!outString)
return FALSE;
result = AB_GetEntryAttributeForPane(abPane, userIndex, attribID, &value);
if (result != 0)
return FALSE;
if (typeOfValue == CHAR_VALUE)
{
// Do the key name first...
if ( (value->u.string != NULL) && (value->u.string[0] != '\0') )
{
lstrcat(outString, stringKey);
lstrcat(outString, (char *)value->u.string);
if (concatString)
lstrcat(outString, concatString);
}
}
else if (typeOfValue == BOOL_VALUE)
{
// Do the key name first...
lstrcat(outString, stringKey);
if (value->u.boolValue)
lstrcat(outString, "TRUE");
else
lstrcat(outString, "FALSE");
if (concatString)
lstrcat(outString, concatString);
}
else if (typeOfValue == INT_VALUE)
{
char tval[16];
// Do the key name first...
lstrcat(outString, stringKey);
wsprintf(tval, "%d", value->u.shortValue);
lstrcat(outString, tval);
if (concatString)
lstrcat(outString, concatString);
}
AB_FreeEntryAttributeValue(value);
return(TRUE);
}
BOOL
GetLDIFLineForUser(MSG_Pane *abPane, LONG userIndex, LPSTR outString,
NABUserID *userID, NABUpdateTime *updtTime)
{
ABID id;
int i;
BOOL rc;
if (!outString)
return FALSE;
outString[0] = '\0';
lstrcpy(outString, "dn: ");
rc = TackOnAttributeValuePair(abPane, userIndex, outString, AB_attribFullName,
"cn: ", CHAR_VALUE, ",");
if (!rc)
return FALSE;
rc = TackOnAttributeValuePair(abPane, userIndex, outString, AB_attribEmailAddress, "mail: ",
CHAR_VALUE, NAB_CRLF);
if (!rc)
return FALSE;
for (i=0; i<ATTRIB_COUNT; i++)
{
(void) TackOnAttributeValuePair(abPane, userIndex, outString,
attribArray[i].attribID,
attribArray[i].ldifName,
attribArray[i].attribType, NAB_CRLF);
}
// Get the ABID...
int result = AB_GetABIDForIndex(abPane, userIndex, &id);
if (result != 0)
return FALSE;
*userID = id;
*updtTime = 0;
return TRUE;
}
static HFILE hHTMLFile = NULL;
BOOL
OpenNABAPIHTMLFile(LPSTR fName, LPSTR title)
{
hHTMLFile = _lcreat(fName, 0);
if (hHTMLFile == HFILE_ERROR)
return FALSE;
if ( _lwrite(hHTMLFile, HTML_HEAD1, lstrlen(HTML_HEAD1)) == HFILE_ERROR)
{
_lclose(hHTMLFile);
return FALSE;
}
if ( _lwrite(hHTMLFile, title, lstrlen(title)) == HFILE_ERROR)
{
_lclose(hHTMLFile);
return FALSE;
}
if ( _lwrite(hHTMLFile, HMTL_HEAD2, lstrlen(HMTL_HEAD2)) == HFILE_ERROR)
{
_lclose(hHTMLFile);
return FALSE;
}
return TRUE;
}
BOOL
CloseNABAPIHTMLFile(void)
{
if ( _lwrite(hHTMLFile, HTML_TAIL, lstrlen(HTML_TAIL)) == HFILE_ERROR)
{
_lclose(hHTMLFile);
return FALSE;
}
_lclose(hHTMLFile);
hHTMLFile = NULL;
return TRUE;
}
#define HTMLSTART 1
#define HTMLEND 2
#define HTMLBREAK 3
#define HTMLSPACE 4
#define HTMLCOMMA 5
#define HTMLNEWROW 6
#define HTMLENDROW 7
BOOL
DumpHTMLForTable(BOOL hType)
{
LPSTR cstart = "<TD>";
LPSTR cend = "</TD>\n";
LPSTR cbreak = "<BR>";
LPSTR cspace = " ";
LPSTR ccomma = ", ";
LPSTR cnewrow = "<TR>\n";
LPSTR cendrow = "</TR>\n";
LPSTR ptr;
if (hType == HTMLSTART)
ptr = cstart;
else if (hType == HTMLEND)
ptr = cend;
else if (hType == HTMLSPACE)
ptr = cspace;
else if (hType == HTMLCOMMA)
ptr = ccomma;
else if (hType == HTMLNEWROW)
ptr = cnewrow;
else if (hType == HTMLENDROW)
ptr = cendrow;
else
ptr = cbreak;
if ( _lwrite(hHTMLFile, ptr, lstrlen(ptr)) == HFILE_ERROR)
return FALSE;
else
return TRUE;
}
BOOL
DumpHTMLValue(MSG_Pane *abPane, LONG userIndex, AB_AttribID attribID)
{
int result;
AB_AttributeValue *value;
result = AB_GetEntryAttributeForPane(abPane, userIndex, attribID, &value);
if (result != 0)
return FALSE;
if ( (value->u.string != NULL) && (value->u.string[0] != '\0') )
{
if ( _lwrite(hHTMLFile, value->u.string, lstrlen(value->u.string)) == HFILE_ERROR)
return FALSE;
else
return TRUE;
}
else
return FALSE;
}
BOOL
DumpHTMLTableLineForUser(MSG_Pane *abPane, LONG userIndex)
{
DumpHTMLForTable(HTMLNEWROW);
DumpHTMLForTable(HTMLSTART);
DumpHTMLValue(abPane, userIndex, AB_attribFamilyName);
DumpHTMLForTable(HTMLEND);
DumpHTMLForTable(HTMLSTART);
DumpHTMLValue(abPane, userIndex, AB_attribGivenName);
DumpHTMLForTable(HTMLEND);
DumpHTMLForTable(HTMLSTART);
DumpHTMLValue(abPane, userIndex, AB_attribEmailAddress);
DumpHTMLForTable(HTMLEND);
DumpHTMLForTable(HTMLSTART);
if (DumpHTMLValue(abPane, userIndex, AB_attribCompanyName))
DumpHTMLForTable(HTMLBREAK);
DumpHTMLValue(abPane, userIndex, AB_attribTitle);
DumpHTMLForTable(HTMLEND);
DumpHTMLForTable(HTMLSTART);
DumpHTMLValue(abPane, userIndex, AB_attribWorkPhone);
DumpHTMLForTable(HTMLEND);
DumpHTMLForTable(HTMLSTART);
DumpHTMLValue(abPane, userIndex, AB_attribFaxPhone);
DumpHTMLForTable(HTMLEND);
DumpHTMLForTable(HTMLSTART);
DumpHTMLValue(abPane, userIndex, AB_attribHomePhone);
DumpHTMLForTable(HTMLEND);
DumpHTMLForTable(HTMLSTART);
if (DumpHTMLValue(abPane, userIndex, AB_attribPOAddress))
DumpHTMLForTable(HTMLBREAK);
if (DumpHTMLValue(abPane, userIndex, AB_attribStreetAddress))
DumpHTMLForTable(HTMLBREAK);
if (DumpHTMLValue(abPane, userIndex, AB_attribLocality))
DumpHTMLForTable(HTMLCOMMA);
DumpHTMLValue(abPane, userIndex, AB_attribRegion);
if (DumpHTMLValue(abPane, userIndex, AB_attribZipCode))
DumpHTMLForTable(HTMLBREAK);
DumpHTMLValue(abPane, userIndex, AB_attribCountry);
DumpHTMLForTable(HTMLEND);
DumpHTMLForTable(HTMLENDROW);
return TRUE;
}
BOOL
FindAttributeInLine(LPSTR attribName, LPSTR addLine)
{
DWORD totlen, complen, i;
if ( (!attribName) || !(*attribName) )
return FALSE;
if ( (!addLine) || !(*addLine) )
return FALSE;
i = 0;
totlen = strlen(addLine);
complen = strlen(attribName);
while ( (i + complen) <= totlen )
{
if (strncmp( attribName, addLine+i, complen ) == 0)
{
return TRUE;
}
i++;
}
return FALSE;
}
LPSTR
ExtractAttribValue(LPSTR attribName, LPSTR searchLine)
{
DWORD totlen, complen, i;
if ( (!attribName) || !(*searchLine) )
return NULL;
if ( (!searchLine) || !(*searchLine) )
return NULL;
i = 0;
totlen = strlen(searchLine);
complen = strlen(attribName);
while ( (i + complen) <= totlen )
{
if (strncmp( attribName, searchLine+i, complen ) == 0)
{
if (i+complen == totlen) // Check if we are at the end...
return NULL;
LPSTR newPtr;
LPSTR startPtr;
LPSTR endPtr;
DWORD totalSize;
// Have to add this hack for the fact we have an attribute that
// is a subset of another (i.e. "mail: " and "xmozillausehtmlmail: ")
if (
(strcmp(attribName, "mail: ") == 0) && (i > 0) &&
(*(searchLine+i-1) == 'l' )
)
{
i++;
continue;
}
// end of hack
startPtr = searchLine + (i + complen);
endPtr = startPtr;
while ( ((*endPtr) != '\0') && ((*endPtr) != '\r') )
{
endPtr = (endPtr + 1);
}
totalSize = (endPtr - startPtr) + 1;
newPtr = (LPSTR) malloc(totalSize);
if (!newPtr)
return NULL;
memset(newPtr, 0, totalSize);
strncpy(newPtr, startPtr, (totalSize - 1));
return newPtr;
}
i++;
}
return NULL;
}
BOOL
ThisIsAStringAttrib(AB_AttribID attrib)
{
int i;
for (i=0; i<ATTRIB_COUNT; i++)
{
if (attribArray[i].attribID == attrib)
{
if (attribArray[i].attribType == CHAR_VALUE)
return TRUE;
else
return FALSE;
}
}
return FALSE;
}
// Inserting Address Book Entires...
NABError
InsertEntryToAB(AB_ContainerInfo *abContainer, LPSTR newLine,
BOOL updateOnly, ABID *updateID)
{
ULONG i;
DWORD numItems = 0;
ABID tempEntryID;
AB_AttributeValue *values;
BOOL found;
USHORT currentAttribLoc;
// Build the entries to add for the address book...
for (i=0; i<ATTRIB_COUNT; i++)
{
attribArray[i].foundInSearch = FindAttributeInLine(attribArray[i].ldifName, newLine);
if (found)
numItems++;
}
if (numItems == 0)
return(NAB_FAILURE);
++numItems; // add one for the type...
// Now that we have this information, malloc the memory needed and
// move on...
values = (AB_AttributeValue *) malloc(sizeof(AB_AttributeValue) * numItems);
if (!values)
return(NAB_MEMORY_FAILURE);
memset(values, 0, (sizeof(AB_AttributeValue) * numItems));
// First should be the type of entry...
values[0].attrib = AB_attribEntryType;
values[0].u.entryType = AB_Person;
LPSTR ptr;
currentAttribLoc = 1;
for (i=0; i<ATTRIB_COUNT; i++)
{
if (attribArray[i].foundInSearch)
{
if ( (ptr = ExtractAttribValue(attribArray[i].ldifName, newLine)) == NULL)
continue;
// Here?...then we found it!
values[currentAttribLoc].attrib = attribArray[i].attribID;
if (attribArray[i].attribType == CHAR_VALUE)
{
values[currentAttribLoc].u.string = ptr;
}
else if (attribArray[i].attribType == BOOL_VALUE)
{
if (strcmp(ptr, "TRUE") == 0)
values[currentAttribLoc].u.boolValue = TRUE;
else
values[currentAttribLoc].u.boolValue = FALSE;
free(ptr);
}
else if (attribArray[i].attribType == INT_VALUE)
{
values[currentAttribLoc].u.shortValue = atoi(ptr);
free(ptr);
}
currentAttribLoc++;
}
}
int result;
if (updateOnly)
{
result = AB_SetEntryAttributes(abContainer, *updateID, values, currentAttribLoc);
}
else
{
result = AB_AddUserAB2(abContainer, values, currentAttribLoc, &tempEntryID);
*updateID = tempEntryID;
}
// Now free all allocated memory...
for (i=1; i<currentAttribLoc; i++) // start from 1 - 0 is AB_attribEntryType
{
if (ThisIsAStringAttrib(values[i].attrib))
{
if (values[i].u.string != NULL)
free(values[i].u.string);
}
}
free(values);
if (result)
return NAB_FAILURE;
else
return NAB_SUCCESS;
}
BOOL
GetIDSearchField(LPSTR ldifInfo, DWORD *id, LPSTR *searchValue)
{
LPSTR ptr;
DWORD i;
for (i=0; i<ATTRIB_COUNT; i++)
{
if (attribArray[i].attribType != CHAR_VALUE)
continue;
ptr = ExtractAttribValue(attribArray[i].ldifName, ldifInfo);
if (ptr != NULL)
{
*id = attribArray[i].attribID;
break;
}
}
if (!ptr)
return FALSE;
else
{
*searchValue = ptr;
return TRUE;
}
}
BOOL
FindValueForIDInLine(MSG_Pane *addressBookPane, LONG userIndex,
AB_AttribID id, LPSTR searchValue)
{
int result;
AB_AttributeValue *value;
BOOL found = FALSE;
if ((!searchValue) || (!*searchValue))
return FALSE;
result = AB_GetEntryAttributeForPane(addressBookPane, userIndex, id, &value);
if (result != 0)
return FALSE;
// Do the key name first...
if ( (value->u.string != NULL) && (value->u.string[0] != '\0') )
{
if ( strlen(value->u.string) >= strlen(searchValue) )
{
if (_strnicmp(value->u.string, searchValue, strlen(searchValue)) == 0)
{
found = TRUE;
}
}
}
AB_FreeEntryAttributeValue(value);
return(found);
}
BOOL
SearchABForAttrib(AB_ContainerInfo *abContainer,
LPSTR searchAttrib,
LPSTR ldifInfo,
NABUserID *userID,
NABUpdateTime *updtTime)
{
int result;
MSG_Pane *addressBookPane; // Container info for a particular addr book
result = AB_CreateABPane(&addressBookPane, theApp.m_pAddressContext, WFE_MSGGetMaster());
if (result)
{
return FALSE;
}
result = AB_InitializeABPane(addressBookPane, abContainer);
if (result)
{
AB_ClosePane(addressBookPane);
return(FALSE);
}
DWORD id;
int currentLocation = 0;
LONG lineCount = MSG_GetNumLines(addressBookPane);
LPSTR searchValue = NULL;
BOOL found = FALSE;
//
// Support lookups by ABID's...
if ((searchAttrib == NULL) || (searchAttrib[0] == '\0'))
{
while ( currentLocation < lineCount )
{
ABID id;
// Get the ABID...
int result = AB_GetABIDForIndex(addressBookPane, currentLocation, &id);
if (result != 0)
{
++currentLocation;
continue;
}
if (id == *userID)
{
found = TRUE;
if (!GetLDIFLineForUser(addressBookPane, currentLocation, ldifInfo, userID, updtTime))
{
found = FALSE;
currentLocation++;
continue;
}
break;
}
// Increment for next call...
currentLocation++;
}
AB_ClosePane(addressBookPane);
return found;
}
// Support lookups by ABID's...
//
if (!GetIDSearchField(searchAttrib, &id, &searchValue))
{
AB_ClosePane(addressBookPane);
return(FALSE);
}
while ( currentLocation < lineCount )
{
found = FindValueForIDInLine(addressBookPane, currentLocation,
(AB_AttribID)id, searchValue);
if (found)
{
if (!GetLDIFLineForUser(addressBookPane, currentLocation, ldifInfo, userID, updtTime))
{
found = FALSE;
currentLocation++;
continue;
}
break;
}
// Increment for next call...
currentLocation++;
}
if (searchValue != NULL)
free(searchValue);
AB_ClosePane(addressBookPane);
return found;
}

View File

@ -1,85 +0,0 @@
/* -*- 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.
*/
#ifndef _NAB_UTILS_H_
#define _NAB_UTILS_H_
#define CHAR_VALUE 0
#define BOOL_VALUE 1
#define INT_VALUE 2
BOOL GetLDIFLineForUser(MSG_Pane *abPane, LONG userIndex,
LPSTR outString, NABUserID *userID,
NABUpdateTime *updtTime);
// For creating HTML output file...
BOOL OpenNABAPIHTMLFile(LPSTR fName, LPSTR title);
BOOL CloseNABAPIHTMLFile(void);
BOOL DumpHTMLTableLineForUser(MSG_Pane *abPane, LONG userIndex);
BOOL SearchABForAttrib(AB_ContainerInfo *abContainer,
LPSTR searchAttrib,
LPSTR ldifInfo,
NABUserID *userID,
NABUpdateTime *updtTime);
// For insert entries...
NABError InsertEntryToAB(AB_ContainerInfo *abContainer, LPSTR newLine,
BOOL updateOnly, ABID *updateID);
#define HTML_HEAD1 \
"<HTML>\n\
<HEAD>\n\
<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=iso-8859-1\">\n\
<TITLE>"
#define HMTL_HEAD2 \
"</TITLE>\n\
</HEAD>\n\
&nbsp;\n\
<TABLE BORDER >\n"
#define HTML_TAIL "\
</TABLE>\n\
&nbsp;\n\
</BODY>\n\
</HTML>\n"
#endif // _NAB_UTILS_H_
/*
stuff...
<TD>AB_attribFamilyName</TD>
<TD>AB_attribGivenName</TD>
<TD>AB_attribEmailAddress</TD>
<TD>AB_attribCompanyName
<BR>AB_attribTitle</TD>
<TD>AB_attribWorkPhone</TD>
<TD>AB_attribFaxPhone</TD>
<TD>AB_attribHomePhone</TD>
<TD>AB_attribPOAddress
<BR>AB_attribStreetAddress
<BR>AB_attribLocality, AB_attribRegion AB_attribZipCode
<BR>AB_attribCountry</TD>
...end of stuff....
*/

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,873 +0,0 @@
/* -*- 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.
*/
#include "addrfrm.h"
#ifdef MOZ_NEWADDR
#ifndef _addrprop_h_
#define _addrprop_h_
// ADDRFRM.H
//
// DESCRIPTION:
// This file contains the declarations of the various address book related
// classes.
//
#include "rosetta.h"
#include "outliner.h"
#include "apimsg.h"
#include "xp_core.h"
#include "abcom.h"
#include "property.h"
#include "abmldlg.h"
#include "mailfrm.h"
#include "mnrccln.h"
// above the range for normal EN_ messages
#define PEN_ILLEGALCHAR 0x8000
// sent to parent when illegal character hit
// return 0 if you want parsed edit to beep
/****************************************************************************
*
* Class: CAddrEditProperties
*
* DESCRIPTION:
* This class is the property sheet window for editing all the attributes
* of the people types in the address book
*
****************************************************************************/
class CAddrEditProperties : public CNetscapePropertySheet
{
protected:
ABID m_entryID;
CPropertyPage * m_pUserProperties;
CPropertyPage * m_pContact;
HG91827
CPropertyPage * m_pCooltalk;
CMailNewsResourceSwitcher m_MailNewsResourceSwitcher;
MSG_Pane * m_pPane;
//is this a new card
BOOL m_bNew;
public:
MWContext* m_context;
HFONT m_pFont;
public:
CAddrEditProperties ( CAddrFrame* frameref, LPCTSTR lpszCaption,
CWnd * parent = NULL, MSG_Pane * pane = NULL,
MWContext* context = NULL, BOOL bNew = FALSE);
virtual ~CAddrEditProperties ( );
virtual void OnHelp();
virtual int DoModal();
virtual BOOL Create( CWnd* pParentWnd = NULL, DWORD dwStyle = (DWORD)1, DWORD dwExStyle = 0 );
void SetAttributes(MSG_Pane *pane);
HFONT GetHFont() { return (m_pFont); }
void CloseWindow ();
protected:
CAddrFrame* m_frame;
// virtual ~CAddrEditProperties ( );
// Overrides
// ClassWizard generate virtual function overrides
//{{AFX_VIRTUAL(CAddrEditProperties)
public:
virtual void OnOK();
afx_msg void OnDestroy( );
virtual BOOL OnInitDialog();
//}}AFX_VIRTUAL
// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(CAddrEditProperties)
// NOTE: the ClassWizard will add member functions here
afx_msg int OnCreate( LPCREATESTRUCT );
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/****************************************************************************
*
* Class: CAddressUser
*
* DESCRIPTION:
* This class is the property page for editing the most common attributes
* of the people types in the address book
*
****************************************************************************/
class CAddressUser : public CNetscapePropertyPage
{
// Construction
public:
CAddressUser(CWnd *pParent, BOOL bNew);
virtual ~CAddressUser();
BOOL m_bActivated;
BOOL m_bNew;
BOOL m_bUserChangedDisplay;
// Dialog Data
//{{AFX_DATA(CAddressUser)
enum { IDD = IDD_ADDRESS_USER };
CString m_address;
CString m_description;
CString m_firstname;
CString m_lastname;
CString m_nickname;
int m_useHTML;
CString m_company;
CString m_title;
CString m_displayname;
CString m_department;
//}}AFX_DATA
void SetAttributes(MSG_Pane *pane);
BOOL PerformOnOK(MSG_Pane *pane);
void SetFonts( HFONT pFont );
// Overrides
// ClassWizard generate virtual function overrides
//{{AFX_VIRTUAL(CAddressUser)
public:
virtual BOOL OnInitDialog();
virtual BOOL OnSetActive();
virtual BOOL OnKillActive();
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(CAddressUser)
// NOTE: the ClassWizard will add member functions here
afx_msg void OnCloseWindow();
afx_msg void OnNameTextChange();
afx_msg void OnDisplayNameTextChange();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/****************************************************************************
*
* Class: CAddressContact
*
* DESCRIPTION:
* This class is the property page for editing the contact info
* of the people types in the address book
*
****************************************************************************/
class CAddressContact : public CNetscapePropertyPage
{
// Construction
public:
CAddressContact(CWnd *pParent);
virtual ~CAddressContact();
BOOL m_bActivated;
// Dialog Data
//{{AFX_DATA(CAddressContact)
enum { IDD = IDD_ADDRESS_CONTACT };
CString m_poaddress;
CString m_address;
CString m_locality;
CString m_region;
CString m_zip;
CString m_country;
CString m_work;
CString m_fax;
CString m_home;
CString m_pager;
CString m_cellular;
//}}AFX_DATA
void SetAttributes(MSG_Pane *pane);
BOOL PerformOnOK(MSG_Pane *pane);
void SetFonts( HFONT pFont );
// Overrides
// ClassWizard generate virtual function overrides
//{{AFX_VIRTUAL(CAddressContact)
public:
virtual BOOL OnInitDialog();
virtual BOOL OnSetActive();
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(CAddressContact)
// NOTE: the ClassWizard will add member functions here
afx_msg void OnCloseWindow();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/****************************************************************************
*
* Class: CAddressCooltalk
*
* DESCRIPTION:
* This class is the property page for editing and accessing the cool
* talk attributes for a person object.
*
****************************************************************************/
class CAddressCooltalk : public CNetscapePropertyPage
{
// Construction
public:
CAddressCooltalk(CWnd *pParent);
virtual ~CAddressCooltalk();
BOOL m_bActivated;
void SetAttributes(MSG_Pane *pane);
BOOL PerformOnOK(MSG_Pane *pane);
void SetExplanationText();
void SetFonts( HFONT pFont );
// Dialog Data
//{{AFX_DATA(CAddressCooltalk)
enum { IDD = IDD_ADDRESS_COOLTALK };
CString m_ipaddress;
CString m_specificDLS;
CString m_hostorIP;
int m_iUseServer;
//}}AFX_DATA
// Overrides
// ClassWizard generate virtual function overrides
//{{AFX_VIRTUAL(CAddressCooltalk)
public:
virtual BOOL OnInitDialog();
virtual BOOL OnSetActive();
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(CAddressCooltalk)
afx_msg void OnCloseWindow();
afx_msg void OnSelendokServer();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/****************************************************************************
*
* Class: CAddressX
*
* DESCRIPTION:
* This class is the property page for editing and accessing the x
* attributes for a person object.
*
****************************************************************************/
class CAddressX : public CNetscapePropertyPage
{
// Construction
public:
CAddressX(CWnd *pParent); // standard constructor
virtual ~CAddressX();
BOOL m_bActivated;
void SetAttributes(MSG_Pane *pane);
BOOL PerformOnOK(MSG_Pane *pane);
// Dialog Data
//{{AFX_DATA(CAddressX)
enum { IDD = IDD_ADDRESS_X };
CString m_explain1;
CString m_explain2;
CString m_explain3;
//}}AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAddressX)
public:
virtual BOOL OnInitDialog();
virtual BOOL OnSetActive();
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(CAddressX)
// NOTE: the ClassWizard will add member functions here
afx_msg void OnCloseWindow();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/****************************************************************************
*
* Class: CAddrLDAPProperties
*
* DESCRIPTION:
* This class is the property sheet window for editing all the attributes
* of the people types in the address book
*
****************************************************************************/
class CAddrLDAPProperties : public CNetscapePropertySheet
{
protected:
CPropertyPage * m_pLDAPProperties;
CPropertyPage * m_pOfflineProperties;
CMailNewsResourceSwitcher m_MailNewsResourceSwitcher;
public:
DIR_Server* m_pExistServer;
DIR_Server m_serverInfo;
HFONT m_pFont;
MWContext* m_context;
public:
CAddrLDAPProperties (CWnd * parent,
MWContext* context,
DIR_Server* dir = NULL,
LPCTSTR lpszCaption = NULL);
virtual ~CAddrLDAPProperties ( );
virtual void OnHelp();
virtual int DoModal();
HFONT GetHFont() { return (m_pFont); }
protected:
// Overrides
// ClassWizard generate virtual function overrides
//{{AFX_VIRTUAL(CAddrLDAPProperties)
public:
virtual BOOL OnInitDialog();
//}}AFX_VIRTUAL
// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(CAddrLDAPProperties)
// NOTE: the ClassWizard will add member functions here
afx_msg int OnCreate( LPCREATESTRUCT );
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
class CServerDialog : public CNetscapePropertyPage
{
// Attributes
public:
CServerDialog(CWnd* pParent = NULL, DIR_Server *pExistServer = NULL, DIR_Server *pNewServer = NULL);
enum { IDD = IDD_PREF_LDAP_SERVER};
DIR_Server *m_pExistServer;
DIR_Server *m_serverInfo;
BOOL m_bActivated;
//{{AFX_VIRTUAL(CServerDialog)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
BOOL ValidDataInput();
// Overrides
// ClassWizard generate virtual function overrides
//{{AFX_VIRTUAL(CServerDialog)
public:
virtual void OnOK();
virtual BOOL OnSetActive();
virtual BOOL OnKillActive();
virtual BOOL OnInitDialog();
//}}AFX_VIRTUAL
afx_msg void OnCheckX();
afx_msg void OnEnableLoginLDAP();
afx_msg void OnHelp();
DECLARE_MESSAGE_MAP()
};
class CServerOfflineDialog : public CNetscapePropertyPage
{
// Attributes
public:
CServerOfflineDialog(CWnd* pParent = NULL, DIR_Server *pServer = NULL, DIR_Server *pNewServer = NULL);
enum { IDD = IDD_PREF_LDAP_OFFLINE_SETTINGS};
DIR_Server *m_pExistServer;
DIR_Server *m_serverInfo;
BOOL m_bActivated;
//{{AFX_VIRTUAL(CServerOfflineDialog)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
// Overrides
// ClassWizard generate virtual function overrides
//{{AFX_VIRTUAL(CServerOfflineDialog)
public:
virtual void OnOK();
virtual BOOL OnSetActive();
virtual BOOL OnInitDialog();
//}}AFX_VIRTUAL
afx_msg void OnUpdateNow();
afx_msg void OnHelp();
DECLARE_MESSAGE_MAP()
};
#endif
#else //MOZ_NEWADDR
#ifndef _addrprop_h_
#define _addrprop_h_
// ADDRFRM.H
//
// DESCRIPTION:
// This file contains the declarations of the various address book related
// classes.
//
#include "rosetta.h"
#include "outliner.h"
#include "apimsg.h"
#include "xp_core.h"
#include "addrbook.h"
#include "property.h"
#include "abmldlg.h"
#include "mailfrm.h"
#include "mnrccln.h"
// above the range for normal EN_ messages
#define PEN_ILLEGALCHAR 0x8000
// sent to parent when illegal character hit
// return 0 if you want parsed edit to beep
/****************************************************************************
*
* Class: CAddrEditProperties
*
* DESCRIPTION:
* This class is the property sheet window for editing all the attributes
* of the people types in the address book
*
****************************************************************************/
class CAddrEditProperties : public CNetscapePropertySheet
{
protected:
ABID m_entryID;
CPropertyPage * m_pUserProperties;
CPropertyPage * m_pContact;
HG91827
CPropertyPage * m_pCooltalk;
CMailNewsResourceSwitcher m_MailNewsResourceSwitcher;
public:
DIR_Server* m_dir;
MWContext* m_context;
HFONT m_pFont;
PersonEntry* m_pPerson;
public:
CAddrEditProperties ( CAddrFrame* frameref, DIR_Server* dir,
LPCTSTR lpszCaption,
CWnd * parent = NULL, ABID entryID = NULL,
PersonEntry* person = NULL,
MWContext* context = NULL);
virtual ~CAddrEditProperties ( );
virtual void OnHelp();
virtual int DoModal();
virtual BOOL Create( CWnd* pParentWnd = NULL, DWORD dwStyle = (DWORD)1, DWORD dwExStyle = 0 );
void SetEntryID(DIR_Server* dir, ABID entryID = NULL, PersonEntry* person = NULL);
ABID GetEntryID() { return (m_entryID); }
DIR_Server* GetDirectoryServer() { return (m_dir); }
HFONT GetHFont() { return (m_pFont); }
void CloseWindow ();
protected:
CAddrFrame* m_frame;
// virtual ~CAddrEditProperties ( );
// Overrides
// ClassWizard generate virtual function overrides
//{{AFX_VIRTUAL(CAddrEditProperties)
public:
virtual void OnOK();
virtual BOOL OnInitDialog();
//}}AFX_VIRTUAL
// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(CAddrEditProperties)
// NOTE: the ClassWizard will add member functions here
afx_msg int OnCreate( LPCREATESTRUCT );
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/****************************************************************************
*
* Class: CAddressUser
*
* DESCRIPTION:
* This class is the property page for editing the most common attributes
* of the people types in the address book
*
****************************************************************************/
class CAddressUser : public CNetscapePropertyPage
{
// Construction
public:
CAddressUser(CWnd *pParent);
virtual ~CAddressUser();
BOOL m_bActivated;
DIR_Server* m_dir;
// Dialog Data
//{{AFX_DATA(CAddressUser)
enum { IDD = IDD_ADDRESS_USER };
CString m_address;
CString m_description;
CString m_firstname;
CString m_lastname;
CString m_nickname;
int m_useHTML;
CString m_company;
CString m_title;
CString m_department;
CString m_displayname;
//}}AFX_DATA
void SetEntryID(DIR_Server* dir, ABID entryID = NULL, PersonEntry* person = NULL);
BOOL PerformOnOK(PersonEntry* person);
void SetFonts( HFONT pFont );
// Overrides
// ClassWizard generate virtual function overrides
//{{AFX_VIRTUAL(CAddressUser)
public:
virtual BOOL OnInitDialog();
virtual BOOL OnSetActive();
virtual BOOL OnKillActive();
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(CAddressUser)
// NOTE: the ClassWizard will add member functions here
afx_msg void OnCloseWindow();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/****************************************************************************
*
* Class: CAddressContact
*
* DESCRIPTION:
* This class is the property page for editing the contact info
* of the people types in the address book
*
****************************************************************************/
class CAddressContact : public CNetscapePropertyPage
{
// Construction
public:
CAddressContact(CWnd *pParent);
virtual ~CAddressContact();
BOOL m_bActivated;
DIR_Server* m_dir;
// Dialog Data
//{{AFX_DATA(CAddressContact)
enum { IDD = IDD_ADDRESS_CONTACT };
CString m_poaddress;
CString m_address;
CString m_locality;
CString m_region;
CString m_zip;
CString m_country;
CString m_work;
CString m_fax;
CString m_home;
CString m_pager;
CString m_cellular;
//}}AFX_DATA
void SetEntryID(DIR_Server* dir, ABID entryID = NULL, PersonEntry* person = NULL);
BOOL PerformOnOK(PersonEntry* person);
void SetFonts( HFONT pFont );
// Overrides
// ClassWizard generate virtual function overrides
//{{AFX_VIRTUAL(CAddressContact)
public:
virtual BOOL OnInitDialog();
virtual BOOL OnSetActive();
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(CAddressContact)
// NOTE: the ClassWizard will add member functions here
afx_msg void OnCloseWindow();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/****************************************************************************
*
* Class: CAddressCooltalk
*
* DESCRIPTION:
* This class is the property page for editing and accessing the cool
* talk attributes for a person object.
*
****************************************************************************/
class CAddressCooltalk : public CNetscapePropertyPage
{
// Construction
public:
CAddressCooltalk(CWnd *pParent);
virtual ~CAddressCooltalk();
BOOL m_bActivated;
DIR_Server* m_dir;
void SetEntryID(DIR_Server* dir, ABID entryID = NULL, PersonEntry* person = NULL);
BOOL PerformOnOK(PersonEntry* person);
void SetExplanationText();
void SetFonts( HFONT pFont );
// Dialog Data
//{{AFX_DATA(CAddressCooltalk)
enum { IDD = IDD_ADDRESS_COOLTALK };
CString m_ipaddress;
CString m_specificDLS;
CString m_hostorIP;
int m_iUseServer;
//}}AFX_DATA
// Overrides
// ClassWizard generate virtual function overrides
//{{AFX_VIRTUAL(CAddressCooltalk)
public:
virtual BOOL OnInitDialog();
virtual BOOL OnSetActive();
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(CAddressCooltalk)
afx_msg void OnCloseWindow();
afx_msg void OnSelendokServer();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/****************************************************************************
*
* Class: CAddrLDAPProperties
*
* DESCRIPTION:
* This class is the property sheet window for editing all the attributes
* of the people types in the address book
*
****************************************************************************/
class CAddrLDAPProperties : public CNetscapePropertySheet
{
protected:
CPropertyPage * m_pLDAPProperties;
CPropertyPage * m_pOfflineProperties;
CMailNewsResourceSwitcher m_MailNewsResourceSwitcher;
public:
DIR_Server* m_pExistServer;
DIR_Server m_serverInfo;
HFONT m_pFont;
MWContext* m_context;
public:
CAddrLDAPProperties (CWnd * parent,
MWContext* context,
DIR_Server* dir = NULL,
LPCTSTR lpszCaption = NULL);
virtual ~CAddrLDAPProperties ( );
virtual void OnHelp();
virtual int DoModal();
HFONT GetHFont() { return (m_pFont); }
protected:
// Overrides
// ClassWizard generate virtual function overrides
//{{AFX_VIRTUAL(CAddrLDAPProperties)
public:
virtual BOOL OnInitDialog();
//}}AFX_VIRTUAL
// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(CAddrLDAPProperties)
// NOTE: the ClassWizard will add member functions here
afx_msg int OnCreate( LPCREATESTRUCT );
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
class CServerDialog : public CNetscapePropertyPage
{
// Attributes
public:
CServerDialog(CWnd* pParent = NULL, DIR_Server *pExistServer = NULL, DIR_Server *pNewServer = NULL);
enum { IDD = IDD_PREF_LDAP_SERVER};
DIR_Server *m_pExistServer;
DIR_Server *m_serverInfo;
BOOL m_bActivated;
//{{AFX_VIRTUAL(CServerDialog)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
BOOL ValidDataInput();
// Overrides
// ClassWizard generate virtual function overrides
//{{AFX_VIRTUAL(CServerDialog)
public:
virtual void OnOK();
virtual BOOL OnKillActive();
virtual BOOL OnSetActive();
virtual BOOL OnInitDialog();
//}}AFX_VIRTUAL
afx_msg void OnCheckX();
afx_msg void OnEnableLoginLDAP();
afx_msg void OnHelp();
DECLARE_MESSAGE_MAP()
};
class CServerOfflineDialog : public CNetscapePropertyPage
{
// Attributes
public:
CServerOfflineDialog(CWnd* pParent = NULL, DIR_Server *pServer = NULL, DIR_Server *pNewServer = NULL);
enum { IDD = IDD_PREF_LDAP_OFFLINE_SETTINGS};
DIR_Server *m_pExistServer;
DIR_Server *m_serverInfo;
BOOL m_bActivated;
//{{AFX_VIRTUAL(CServerOfflineDialog)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
// Overrides
// ClassWizard generate virtual function overrides
//{{AFX_VIRTUAL(CServerOfflineDialog)
public:
virtual void OnOK();
virtual BOOL OnSetActive();
virtual BOOL OnInitDialog();
//}}AFX_VIRTUAL
afx_msg void OnUpdateNow();
afx_msg void OnHelp();
DECLARE_MESSAGE_MAP()
};
#endif
#endif // MOZ_NEWADDR

View File

@ -1,125 +0,0 @@
/* -*- 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.
*/
// AdvOpDlg.cpp : implementation file
// Called from srchfrm.cpp and used to customize search for the search messages dialog.
#include "stdafx.h"
#include "AdvOpDlg.h"
#include "prefapi.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAdvSearchOptionsDlg dialog
CAdvSearchOptionsDlg::CAdvSearchOptionsDlg(CWnd* pParent /*=NULL*/)
: CDialog(CAdvSearchOptionsDlg::IDD, pParent)
{
m_pParent = pParent;
if (!CDialog::Create(CAdvSearchOptionsDlg::IDD, pParent))
{
TRACE0("Warning: creation of CAdvSearchOptionsDlg dialog failed\n");
return;
}
if( m_pParent && ::IsWindow(m_pParent->m_hWnd) ){
m_pParent->EnableWindow(FALSE);
}
this->EnableWindow(TRUE);
//{{AFX_DATA_INIT(CAdvSearchOptionsDlg)
m_bIncludeSubfolders = FALSE;
m_iSearchArea = 0;
//}}AFX_DATA_INIT
m_bChanges= FALSE;
}
void CAdvSearchOptionsDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAdvSearchOptionsDlg)
DDX_Check(pDX, IDC_CHECK_SUBFOLDERS, m_bIncludeSubfolders);
DDX_Radio(pDX, IDC_RADIO_SEARCH_LOCAL, m_iSearchArea);
//}}AFX_DATA_MAP
}
BOOL CAdvSearchOptionsDlg::OnInitDialog()
{
CDialog::OnInitDialog();
XP_Bool bSubFolders = FALSE;
XP_Bool bSearchServer = FALSE;
PREF_GetBoolPref("mailnews.searchSubFolders",&bSubFolders);
m_bIncludeSubfolders = bSubFolders;
PREF_GetBoolPref("mailnews.searchServer",&bSearchServer);
m_iSearchArea = !bSearchServer ? 0 : 1;
UpdateData(FALSE);
return TRUE;
}
void CAdvSearchOptionsDlg::OnOK()
{
UpdateData();
PREF_SetBoolPref("mailnews.searchSubFolders",(XP_Bool)m_bIncludeSubfolders);
XP_Bool bSearchServer = m_iSearchArea ? 1 : 0;
PREF_SetBoolPref("mailnews.searchServer", bSearchServer);
m_bChanges = TRUE;
GetParent()->PostMessage(WM_ADVANCED_OPTIONS_DONE);
OnClose();
}
void CAdvSearchOptionsDlg::OnHelp()
{
//!!TODO add NetHelp(..) call here.
}
void CAdvSearchOptionsDlg::PostNcDestroy()
{
CDialog::PostNcDestroy();
if( m_pParent && ::IsWindow(m_pParent->m_hWnd) ){
m_pParent->EnableWindow(TRUE);
// Return focus to parent window
m_pParent->SetActiveWindow();
m_pParent->SetFocus();
}
delete this;
}
void CAdvSearchOptionsDlg::OnClose()
{
DestroyWindow();
}
BEGIN_MESSAGE_MAP(CAdvSearchOptionsDlg, CDialog)
//{{AFX_MSG_MAP(CAdvSearchOptionsDlg)
ON_BN_CLICKED( IDOK, OnOK)
ON_BN_CLICKED( IDC_ADVANCED_SEARCH_HELP, OnHelp)
ON_COMMAND(IDCANCEL, OnClose)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAdvSearchOptionsDlg message handlers

View File

@ -1,64 +0,0 @@
/* -*- 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.
*/
// AdvOpDlg.h : header file
//
#ifndef _ADVOPDLG__H_
#define _ADVOPDLG__H_
#include <afxwin.h>
#define WM_ADVANCED_OPTIONS_DONE (WM_USER + 1555)
/////////////////////////////////////////////////////////////////////////////
// CAdvSearchOptionsDlg dialog
class CAdvSearchOptionsDlg : public CDialog
{
// Construction
public:
CAdvSearchOptionsDlg(CWnd* pParent = NULL); // standard constructor
void PostNcDestroy();
// Dialog Data
//{{AFX_DATA(CAdvSearchOptionsDlg)
enum { IDD = IDD_ADVANCED_SEARCH };
BOOL m_bIncludeSubfolders;
int m_iSearchArea;
//}}AFX_DATA
BOOL m_bChanges;
CWnd *m_pParent;
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAdvSearchOptionsDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(CAdvSearchOptionsDlg)
afx_msg void OnOK();
afx_msg BOOL OnInitDialog();
afx_msg void OnHelp();
afx_msg void OnClose();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
#endif

View File

@ -1,532 +0,0 @@
/* -*- 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.
*/
#include "stdafx.h"
#include "windowsx.h"
#include "wfemsg.h"
#include "prefapi.h"
#include "nethelp.h"
#include "advprosh.h"
/*-----------------------------------------------------------------*/
/* */
/* Search options page */
/* */
/*-----------------------------------------------------------------*/
CSearchOptionsPage::CSearchOptionsPage(CWnd *pParent, UINT nID)
: CNetscapePropertyPage(nID)
{
m_pParent = pParent;
m_bHasBeenViewed = FALSE;
}
CSearchOptionsPage::~CSearchOptionsPage()
{
}
void CSearchOptionsPage::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAdvSearchOptionsDlg)
DDX_Check(pDX, IDC_CHECK_SUBFOLDERS, m_bIncludeSubfolders);
DDX_Check(pDX, IDC_CHECK_SEARCH_LOCALLY, m_iSearchArea);
//}}AFX_DATA_MAP
}
BOOL CSearchOptionsPage::OnInitDialog()
{
XP_Bool bSubFolders = FALSE;
XP_Bool bSearchServer = FALSE;
PREF_GetBoolPref("mailnews.searchSubFolders",&bSubFolders);
m_bIncludeSubfolders = bSubFolders;
m_bOffline = NET_IsOffline();
if(!m_bOffline)
PREF_GetBoolPref("mailnews.searchServer",&bSearchServer);
else
{
CWnd * pCheck = GetDlgItem(IDC_CHECK_SEARCH_LOCALLY);
if(pCheck != NULL)
pCheck->EnableWindow(FALSE);
}
m_iSearchArea = bSearchServer ? 0 : 1;
UpdateData(FALSE);
m_bHasBeenViewed = TRUE;
BOOL ret = CNetscapePropertyPage::OnInitDialog();
return ret;
}
void CSearchOptionsPage::OnOK()
{
if(!m_bHasBeenViewed)
return;
UpdateData();
PREF_SetBoolPref("mailnews.searchSubFolders",(XP_Bool)m_bIncludeSubfolders);
if(!m_bOffline)
{
XP_Bool bSearchServer = m_iSearchArea ? 0 : 1;
PREF_SetBoolPref("mailnews.searchServer", bSearchServer);
}
}
void CSearchOptionsPage::OnCancel()
{
CNetscapePropertyPage::OnCancel();
}
BOOL CSearchOptionsPage::OnSetActive()
{
if(!CNetscapePropertyPage::OnSetActive())
return FALSE;
return TRUE ;
}
BOOL CSearchOptionsPage::OnKillActive()
{
return CNetscapePropertyPage::OnKillActive();
}
BEGIN_MESSAGE_MAP(CSearchOptionsPage, CNetscapePropertyPage)
END_MESSAGE_MAP()
/*-----------------------------------------------------------------*/
/* */
/* Edit headers page */
/* */
/*-----------------------------------------------------------------*/
CCustomHeadersPage::CCustomHeadersPage(CWnd *pParent, UINT nID)
: CNetscapePropertyPage(nID)
{
m_pParent = pParent;
m_bHasBeenViewed = FALSE;
}
CCustomHeadersPage::~CCustomHeadersPage()
{
}
void CCustomHeadersPage::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BOOL CCustomHeadersPage::OnInitDialog()
{
MSG_FolderInfo *pInbox = NULL;
MSG_GetFoldersWithFlag (WFE_MSGGetMaster(), MSG_FOLDER_FLAG_INBOX, &pInbox, 1);
uint16 numItems;
MSG_GetNumAttributesForFilterScopes (WFE_MSGGetMaster(), scopeMailFolder, (void**)&pInbox, 1, &numItems);
MSG_SearchMenuItem * pHeaderItems = new MSG_SearchMenuItem [numItems];
if (!pHeaderItems)
return FALSE;
MSG_GetAttributesForFilterScopes (WFE_MSGGetMaster(), scopeMailFolder, (void**)&pInbox, 1, pHeaderItems, &numItems);
CListBox * pList = (CListBox *)GetDlgItem(IDC_HEADER_LIST);
for (int i=0; i < numItems; i++)
{
if ( (pHeaderItems[i].attrib == attribOtherHeader) && pHeaderItems[i].isEnabled )
pList->AddString(pHeaderItems[i].name);
}
delete pHeaderItems;
updateUI();
m_bHasBeenViewed = TRUE;
return CNetscapePropertyPage::OnInitDialog();
}
void CCustomHeadersPage::OnAddHeader()
{
CEdit * pEdit = (CEdit *)GetDlgItem(IDC_EDIT_NEW_HEADER);
CListBox * pList = (CListBox *)GetDlgItem(IDC_HEADER_LIST);
char szString[256] = {'\0'};
pEdit->GetWindowText(szString, sizeof(szString));
if(strlen(szString) == 0)
return;
pList->AddString(szString);
pEdit->SetWindowText("");
pEdit->SetFocus();
}
void CCustomHeadersPage::OnRemoveHeader()
{
CListBox * pList = (CListBox *)GetDlgItem(IDC_HEADER_LIST);
int iSel = pList->GetCurSel();
if(iSel < 0)
return;
pList->DeleteString(iSel);
int iNewCount = pList->GetCount();
if(iNewCount > 0)
pList->SetCurSel((iSel >= iNewCount) ? iNewCount - 1 : iSel);
OnSelChangeHeaderList();
if(iNewCount == 0)
{
CEdit * pEdit = (CEdit *)GetDlgItem(IDC_EDIT_NEW_HEADER);
pEdit->SetFocus();
}
}
void CCustomHeadersPage::OnReplaceHeader()
{
CEdit * pEdit = (CEdit *)GetDlgItem(IDC_EDIT_NEW_HEADER);
CListBox * pList = (CListBox *)GetDlgItem(IDC_HEADER_LIST);
char szString[256] = {'\0'};
pEdit->GetWindowText(szString, sizeof(szString));
if(strlen(szString) == 0)
return;
int iSel = pList->GetCurSel();
if(iSel != LB_ERR)
{
pList->DeleteString(iSel);
pList->InsertString(iSel, szString);
}
else
pList->AddString(szString);
updateUI();
pEdit->SetFocus();
}
void CCustomHeadersPage::OnChangeEditHeader()
{
updateUI();
char szString[256];
GetDlgItemText(IDC_EDIT_NEW_HEADER, szString, sizeof(szString));
if(strlen(szString) > 0)
SetDefID(IDC_ADD_HEADER);
}
void CCustomHeadersPage::OnSelChangeHeaderList()
{
CEdit * pEdit = (CEdit *)GetDlgItem(IDC_EDIT_NEW_HEADER);
CListBox * pList = (CListBox *)GetDlgItem(IDC_HEADER_LIST);
char szString[256] = {'\0'};
int iSel = pList->GetCurSel();
if(iSel >= 0)
{
pList->GetText(iSel, szString);
pEdit->SetWindowText(szString);
}
else
pEdit->SetWindowText("");
updateUI();
}
BOOL CCustomHeadersPage::OnSetActive()
{
if(!CNetscapePropertyPage::OnSetActive())
return FALSE;
return TRUE ;
}
BOOL CCustomHeadersPage::OnKillActive()
{
return CNetscapePropertyPage::OnKillActive();
}
void CCustomHeadersPage::OnOK()
{
if(!m_bHasBeenViewed)
return;
CEdit * pEdit = (CEdit *)GetDlgItem(IDC_EDIT_NEW_HEADER);
CListBox * pList = (CListBox *)GetDlgItem(IDC_HEADER_LIST);
int iCount = pList->GetCount();
if(iCount != 0)
{
CString strTemp;
pList->GetText(0, strTemp);
CString strHeaderPrefList = strTemp;
for (int i = 1; i < iCount; i++)
{
pList->GetText(i,strTemp);
strHeaderPrefList += ": " + strTemp;
}
PREF_SetCharPref("mailnews.customHeaders", strHeaderPrefList);
}
else
{
PREF_SetCharPref("mailnews.customHeaders","");
}
CPropertyPage::OnOK();
}
void CCustomHeadersPage::OnCancel()
{
CNetscapePropertyPage::OnCancel();
}
void CCustomHeadersPage::enableDlgItem(int iId, BOOL bEnable)
{
CWnd * pItem = GetDlgItem(iId);
if(pItem == NULL)
return;
pItem->EnableWindow(bEnable);
}
void CCustomHeadersPage::updateUI()
{
CListBox * pList = (CListBox *)GetDlgItem(IDC_HEADER_LIST);
char szString[256] = {'\0'};
int iSel = pList->GetCurSel();
GetDlgItemText(IDC_EDIT_NEW_HEADER, szString, sizeof(szString));
enableDlgItem(IDC_ADD_HEADER, (strlen(szString) > 0));
enableDlgItem(IDC_REMOVE_HEADER, (iSel >= 0));
char szToReplace[256] = {'\0'};
pList->GetText(iSel, szToReplace);
enableDlgItem(IDC_REPLACE_HEADER, ((strlen(szString) > 0) && (iSel >= 0) && (0 != strcmp(szString, szToReplace))));
}
BEGIN_MESSAGE_MAP(CCustomHeadersPage, CNetscapePropertyPage)
ON_BN_CLICKED(IDC_ADD_HEADER, OnAddHeader)
ON_BN_CLICKED(IDC_REMOVE_HEADER, OnRemoveHeader)
ON_BN_CLICKED(IDC_REPLACE_HEADER, OnReplaceHeader)
ON_EN_CHANGE(IDC_EDIT_NEW_HEADER, OnChangeEditHeader)
ON_LBN_SELCHANGE(IDC_HEADER_LIST, OnSelChangeHeaderList)
END_MESSAGE_MAP()
/*-----------------------------------------------------------------*/
/* */
/* Advanced search property sheet */
/* */
/*-----------------------------------------------------------------*/
CAdvancedOptionsPropertySheet::CAdvancedOptionsPropertySheet(CWnd *pParent,
const char* pName,
DWORD dwPagesBitFlag)
: CNetscapePropertySheet(pName, pParent, 0, NULL),
m_pParent(pParent),
m_iReturnCode(IDCANCEL),
m_dwPagesBitFlag(dwPagesBitFlag),
m_OptionsPage(NULL),
m_HeadersPage(NULL)
{
assert(m_dwPagesBitFlag != AOP_NOPAGES);
if(m_dwPagesBitFlag & AOP_SEARCH_OPTIONS)
{
m_OptionsPage = new CSearchOptionsPage(pParent, IDD_ADVANCED_SEARCH);
AddPage(m_OptionsPage);
}
if(m_dwPagesBitFlag & AOP_CUSTOM_HEADERS)
{
m_HeadersPage = new CCustomHeadersPage(pParent, IDD_HEADER_LIST);
AddPage(m_HeadersPage);
}
}
CAdvancedOptionsPropertySheet::~CAdvancedOptionsPropertySheet()
{
if(m_OptionsPage!= NULL)
delete m_OptionsPage;
if(m_HeadersPage!= NULL)
delete m_HeadersPage;
}
CNetscapePropertyPage * CAdvancedOptionsPropertySheet::GetCurrentPage()
{
return (CNetscapePropertyPage *)GetActivePage();
}
BOOL CAdvancedOptionsPropertySheet::OnCommand(WPARAM wParam, LPARAM lParam)
{
#ifdef _WIN32
int id = LOWORD(wParam);
#else
int id = (int)wParam;
#endif
if((id == IDOK) || (id == IDCANCEL))
{
m_iReturnCode = id;
OnClose();
return TRUE;
}
return CNetscapePropertySheet::OnCommand(wParam, lParam);
}
#define BUTTON_CONTAINER 33
#define BUTTON_WIDTH 75
#define BUTTON_HEIGHT 23
#define BUTTON_TO_RIGHT 9
#define BUTTON_TO_BOTTOM 10
#define BUTTON_TO_BUTTON 6
#define X_ADJUSTMENT 9
#define Y_ADJUSTMENT 3
#define SetWinFont(hwnd, hfont, fRedraw) FORWARD_WM_SETFONT((hwnd), (hfont), (fRedraw), ::SendMessage)
#define GetWinFont(hwnd) FORWARD_WM_GETFONT((hwnd), ::SendMessage)
#ifdef _WIN32
BOOL CAdvancedOptionsPropertySheet::OnInitDialog()
{
BOOL ret = CNetscapePropertySheet::OnInitDialog();
#else
int CAdvancedOptionsPropertySheet::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
int ret = CNetscapePropertySheet::OnCreate(lpCreateStruct);
#endif
if(m_pParent && ::IsWindow(m_pParent->m_hWnd))
m_pParent->EnableWindow(FALSE);
EnableWindow(TRUE);
RECT rc;
GetWindowRect(&rc);
int iWidth = rc.right - rc.left;
int iHeight = rc.bottom - rc.top + BUTTON_CONTAINER;
SetWindowPos(NULL,0,0, iWidth, iHeight, SWP_NOZORDER | SWP_NOMOVE);
DWORD dwStyle = WS_VISIBLE | WS_CHILD;
HINSTANCE hInst = AfxGetInstanceHandle();
GetClientRect(&rc);
HFONT hFont = GetWinFont(m_hWnd);
int y = rc.bottom - rc.top - BUTTON_TO_BOTTOM - BUTTON_HEIGHT + Y_ADJUSTMENT;
int w = BUTTON_WIDTH;
int h = BUTTON_HEIGHT;
int x;
HWND hWnd;
x = rc.right - rc.left - BUTTON_TO_RIGHT - (BUTTON_TO_BUTTON + BUTTON_WIDTH) + X_ADJUSTMENT;
hWnd = CreateWindow("button", "Help", dwStyle, x,y, w, h, m_hWnd, (HMENU)IDHELP, hInst, NULL);
SetWinFont(hWnd, hFont, TRUE);
x -= BUTTON_TO_BUTTON + BUTTON_WIDTH;
hWnd = CreateWindow("button", "Cancel", dwStyle, x,y, w, h, m_hWnd, (HMENU)IDCANCEL, hInst, NULL);
SetWinFont(hWnd, hFont, TRUE);
x -= BUTTON_TO_BUTTON + BUTTON_WIDTH;
hWnd = CreateWindow("button", "OK", dwStyle, x,y, w, h, m_hWnd, (HMENU)IDOK, hInst, NULL);
SetWinFont(hWnd, hFont, TRUE);
return ret;
}
void CAdvancedOptionsPropertySheet::OnDestroy()
{
CNetscapePropertySheet::OnDestroy();
}
void CAdvancedOptionsPropertySheet::OnClose()
{
if(m_dwPagesBitFlag & AOP_SEARCH_OPTIONS)
{
if(m_iReturnCode == IDOK)
m_OptionsPage->OnOK();
m_pParent->PostMessage(WM_ADVANCED_OPTIONS_DONE, 0, m_iReturnCode);
}
if(m_dwPagesBitFlag & AOP_CUSTOM_HEADERS)
{
if(m_iReturnCode == IDOK)
m_HeadersPage->OnOK();
m_pParent->PostMessage(WM_EDIT_CUSTOM_DONE, 0, m_iReturnCode);
}
if(m_pParent && ::IsWindow(m_pParent->m_hWnd))
m_pParent->EnableWindow(TRUE);
DestroyWindow();
}
void CAdvancedOptionsPropertySheet::OnNcDestroy()
{
delete this;
}
void CAdvancedOptionsPropertySheet::OnHelp()
{
if(GetActivePage() == m_OptionsPage)
NetHelp(HELP_SEARCH_MAILNEWS_OPTIONS);
if(GetActivePage() == m_HeadersPage)
NetHelp(HELP_SEARCH_MAILNEWS_HEADERS);
}
BOOL CAdvancedOptionsPropertySheet::PreTranslateMessage(MSG * pMsg)
{
if(pMsg->message == WM_KEYDOWN)
{
switch ((int)pMsg->wParam)
{
case VK_ESCAPE:
OnClose();
break;
default:
return CNetscapePropertySheet::PreTranslateMessage(pMsg);
break;
}
return TRUE;
}
return CNetscapePropertySheet::PreTranslateMessage(pMsg);
}
BEGIN_MESSAGE_MAP(CAdvancedOptionsPropertySheet, CNetscapePropertySheet)
#ifndef _WIN32
ON_WM_CREATE()
#endif
ON_WM_CLOSE()
ON_WM_DESTROY()
END_MESSAGE_MAP()

View File

@ -1,137 +0,0 @@
/* -*- 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.
*/
#ifndef ADVPROPSHEET_H
#define ADVPROPSHEET_H
#include "property.h"
#include "msg_filt.h"
#define WM_ADVANCED_OPTIONS_DONE (WM_USER + 1555)
#define WM_EDIT_CUSTOM_DONE (WM_USER + 1556)
class CAdvancedOptionsPropertySheet;
class CSearchOptionsPage : public CNetscapePropertyPage
{
public:
CSearchOptionsPage(CWnd *pParent, UINT nID);
~CSearchOptionsPage();
virtual BOOL OnInitDialog();
virtual BOOL OnSetActive();
virtual BOOL OnKillActive( );
virtual void OnOK();
virtual void OnCancel();
//{{AFX_DATA(CSearchOptionsPage)
enum { IDD = IDD_ADVANCED_SEARCH };
BOOL m_bIncludeSubfolders;
int m_iSearchArea;
//}}AFX_DATA
//{{AFX_VIRTUAL(CSearchOptionsPage)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
protected:
CWnd * m_pParent;
BOOL m_bHasBeenViewed;
BOOL m_bOffline;
DECLARE_MESSAGE_MAP()
};
class CCustomHeadersPage : public CNetscapePropertyPage
{
public:
CCustomHeadersPage(CWnd *pParent, UINT nID);
~CCustomHeadersPage();
virtual BOOL OnInitDialog();
virtual BOOL OnSetActive();
virtual BOOL OnKillActive();
virtual void OnAddHeader();
virtual void OnRemoveHeader();
virtual void OnReplaceHeader();
virtual void OnChangeEditHeader();
virtual void OnSelChangeHeaderList();
virtual void OnOK();
virtual void OnCancel();
void updateUI();
void enableDlgItem(int iId, BOOL bEnable);
//{{AFX_DATA(CCustomHeadersPage)
enum { IDD = IDD_HEADER_LIST };
//}}AFX_DATA
//{{AFX_VIRTUAL(CCustomHeadersPage)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
protected:
CWnd * m_pParent;
BOOL m_bHasBeenViewed;
DECLARE_MESSAGE_MAP()
};
class CAdvancedOptionsPropertySheet : public CNetscapePropertySheet
{
public:
CAdvancedOptionsPropertySheet(CWnd *pParent, const char* pName, DWORD dwPagesBitFlag = 0L);
~CAdvancedOptionsPropertySheet();
CNetscapePropertyPage * GetCurrentPage();
virtual void OnHelp();
protected:
CWnd * m_pParent;
int m_iReturnCode;
DWORD m_dwPagesBitFlag;
CSearchOptionsPage * m_OptionsPage;
CCustomHeadersPage * m_HeadersPage;
virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam);
virtual void OnNcDestroy();
virtual void OnClose();
virtual BOOL PreTranslateMessage(MSG * pMsg);
#ifdef _WIN32
virtual BOOL OnInitDialog();
#else
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
#endif
virtual void OnDestroy();
DECLARE_MESSAGE_MAP()
};
// Advanced Options pages (bitflags)
#define AOP_NOPAGES 0x00000000
#define AOP_SEARCH_OPTIONS 0x00000001
#define AOP_CUSTOM_HEADERS 0x00000002
#endif // ADVPROPSHEET_H

View File

@ -1,322 +0,0 @@
/* -*- 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.
*/
#include "stdafx.h"
#include "animbar.h"
#define ANIMATION_WIDTH 20
#define ANIMATION_HEIGHT 20
#undef ANIMATION_PERIOD
#define ANIMATION_PERIOD (4000)
CAnimation::CAnimation(CWnd *pParent ): CWnd()
{
m_uAnimationClock = 0;
m_bInited = FALSE;
m_bCaptured = FALSE;
m_bDepressed = FALSE;
m_hAnimBitmap = NULL;
m_iAnimationCount = 0;
m_iconSize.cx = ANIMATION_WIDTH;
m_iconSize.cy = ANIMATION_HEIGHT;
CreateEx(0, NULL, _T("NSAnimation"),
WS_CHILD|WS_VISIBLE,
0, 0,
m_iconSize.cx + 4,
m_iconSize.cy + 4,
pParent->GetSafeHwnd(), (HMENU) 101);
//Changed AfxGetInstanceHandle to AfxGetResourceHandle to insure loading bitmaps
//from the LANG DLL and not netscape.exe benito
if (!m_bInited) {
CDC *pDC = GetDC();
m_hAnimBitmap = wfe_LoadBitmap(AfxGetResourceHandle(), pDC->m_hDC, MAKEINTRESOURCE(IDB_ANIMSMALL_0));
BITMAP bm;
GetObject( m_hAnimBitmap, sizeof(BITMAP), &bm );
m_iFrameCount = bm.bmWidth / m_iconSize.cx;
ReleaseDC( pDC );
m_bInited = TRUE;
}
}
BEGIN_MESSAGE_MAP(CAnimation, CWnd)
ON_WM_PAINT()
ON_WM_TIMER()
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_WM_MOUSEMOVE()
ON_WM_DESTROY()
END_MESSAGE_MAP()
void CAnimation::OnPaint()
{
CPaintDC dc(this);
RECT rect;
GetClientRect(&rect);
WFE_Draw3DButtonRect( dc.m_hDC, &rect, m_bDepressed );
AnimateIcon();
}
void CAnimation::OnTimer(UINT nID)
{
CWnd::OnTimer(nID);
if (nID == WIN_ANIMATE_ICON_TIMER) {
if(m_bInited)
{
m_iAnimationCount = ( m_iAnimationCount % m_iFrameCount ) + 1;
AnimateIcon();
}
}
}
void CAnimation::OnLButtonDown( UINT nFlags, CPoint point )
{
RECT rect;
GetClientRect(&rect);
m_bDepressed = ::PtInRect(&rect, point);
if (m_bDepressed) {
SetCapture();
m_bCaptured = TRUE;
Invalidate();
UpdateWindow();
}
}
void CAnimation::OnMouseMove( UINT nFlags, CPoint point )
{
if (m_bCaptured) {
RECT rect;
GetClientRect(&rect);
BOOL bDepressed = ::PtInRect(&rect, point);
if (bDepressed != m_bDepressed) {
m_bDepressed = bDepressed;
Invalidate();
UpdateWindow();
}
}
}
void CAnimation::OnLButtonUp( UINT nFlags, CPoint point )
{
if (m_bCaptured) {
ReleaseCapture();
m_bCaptured = FALSE;
RECT rect;
GetClientRect(&rect);
BOOL bDepressed = ::PtInRect(&rect, point);
GetParentFrame()->SendMessage( WM_COMMAND, (WPARAM) ID_ANIMATION_BONK, (LPARAM) 0 );
}
m_bDepressed = FALSE;
Invalidate();
UpdateWindow();
}
void CAnimation::OnDestroy()
{
if (m_hAnimBitmap)
VERIFY(DeleteObject( m_hAnimBitmap ));
// Right now, the context has already been deleted, since
// it's not a true COM object.
// m_pIMWContext->Release();
}
void CAnimation::StopAnimation()
{
m_iAnimationCount = 0;
if (m_uAnimationClock)
KillTimer(m_uAnimationClock);
m_uAnimationClock = 0;
AnimateIcon();
}
void CAnimation::StartAnimation()
{
m_iAnimationCount = 1;
m_uAnimationClock = SetTimer(WIN_ANIMATE_ICON_TIMER, ANIMATION_PERIOD/m_iFrameCount, NULL);
}
void CAnimation::AnimateIcon()
{
CClientDC dc(this);
CRect rect;
GetClientRect(&rect);
// check if our application level CDC exists
if(!theApp.pIconDC) {
theApp.pIconDC = new CDC;
theApp.pIconDC->CreateCompatibleDC(&dc);
}
HBITMAP hOldBitmap = (HBITMAP) theApp.pIconDC->SelectObject( m_hAnimBitmap );
dc.BitBlt( 2, 2,
m_iconSize.cx, m_iconSize.cy,
theApp.pIconDC,
m_iconSize.cx * m_iAnimationCount, // X offset into the strip
0,
SRCCOPY);
// Reselect the old object
theApp.pIconDC->SelectObject( hOldBitmap );
}
/////////////////////////////////////////////////////////////////////////////
// CAnimationBar toolbar derived class
CAnimationBar::CAnimationBar( ): CAnimationBarParent ()
{
m_iconPt.x = 0;
m_iconPt.y = 0;
m_wndAnimation = NULL;
}
CAnimationBar::~CAnimationBar()
{
if ( m_wndAnimation ) {
m_wndAnimation->DestroyWindow();
}
}
void CAnimationBar::StartAnimation()
{
if (m_wndAnimation)
m_wndAnimation->StartAnimation();
}
void CAnimationBar::StopAnimation()
{
if (m_wndAnimation)
m_wndAnimation->StopAnimation();
}
#ifdef XP_WIN32
CSize CAnimationBar::CalcFixedLayout(BOOL bStretch, BOOL bHorz)
{
CSize size = CAnimationBarParent::CalcFixedLayout(bStretch, bHorz);
if (m_wndAnimation) {
CRect rectAnimation;
m_wndAnimation->GetWindowRect(&rectAnimation);
int cy = rectAnimation.Height() + m_cyTopBorder + m_cyBottomBorder + 4;
if (size.cy < cy )
size.cy = cy;
}
return size;
}
CSize CAnimationBar::CalcDynamicLayout(int nLength, DWORD dwMode )
{
int nToolbarHeight = 0;
int nAnimationHeight = 0;
CRect animationRect;
if(m_wndAnimation)
{
m_wndAnimation->GetWindowRect(animationRect);
nAnimationHeight = animationRect.Height() + 4;
}
if(m_pToolbar)
{
nToolbarHeight = m_pToolbar->GetHeight() + 4;
}
return CSize(32767,
(nToolbarHeight > nAnimationHeight) ? nToolbarHeight : nAnimationHeight);
}
#endif
void CAnimationBar::PlaceToolbar(void)
{
CRect rectAnimation;
if ( m_wndAnimation ) {
m_wndAnimation->GetWindowRect(&rectAnimation);
CRect rectBar;
GetClientRect(&rectBar);
m_iconPt.x = rectBar.Width() - rectAnimation.Width() - GetSystemMetrics(SM_CXBORDER) - 1;
m_iconPt.y = rectBar.Height() / 2 - rectAnimation.Height() / 2 + 2;
if(m_pToolbar)
{
int nHeight = m_pToolbar->GetHeight();
// m_pToolbar->MoveWindow(0, (rectBar.Height() - nHeight) / 2 + 1, cx - rectAnimation.Width(), nHeight, FALSE);
m_pToolbar->SetWindowPos(NULL, 0, (rectBar.Height() - nHeight) / 2 + 1, m_iconPt.x, nHeight,
/*SWP_NOMOVE|*/ SWP_NOREDRAW);
}
}
}
BEGIN_MESSAGE_MAP(CAnimationBar, CAnimationBarParent)
ON_WM_CREATE()
ON_WM_SIZE()
END_MESSAGE_MAP()
int CAnimationBar::OnCreate( LPCREATESTRUCT lpCreateStruct )
{
int res = CAnimationBarParent::OnCreate( lpCreateStruct );
if ( res != -1 ) {
m_wndAnimation = new CAnimation( this );
res = m_wndAnimation ? 0 : -1;
}
return res;
}
void CAnimationBar::OnSize( UINT nType, int cx, int cy )
{
CRect rectAnimation;
if ( nType != SIZE_MINIMIZED && m_wndAnimation ) {
m_wndAnimation->GetWindowRect(&rectAnimation);
CRect rectBar;
GetClientRect(&rectBar);
CClientDC dc( this );
m_iconPt.x = rectBar.Width() - rectAnimation.Width() - GetSystemMetrics(SM_CXBORDER) - 1;
m_iconPt.y = rectBar.Height() / 2 - rectAnimation.Height() / 2 + 2;
m_wndAnimation->SetWindowPos(NULL, m_iconPt.x, m_iconPt.y, 0, 0,
SWP_NOZORDER|SWP_NOSIZE);
if(m_pToolbar)
{
int nHeight = m_pToolbar->GetHeight();
// m_pToolbar->MoveWindow(0, (rectBar.Height() - nHeight) / 2 + 1, cx - rectAnimation.Width(), nHeight, FALSE);
m_pToolbar->SetWindowPos(NULL, 0, (rectBar.Height() - nHeight) / 2 + 1, m_iconPt.x, nHeight,
/*SWP_NOMOVE|*/ SWP_NOREDRAW);
}
}
}

View File

@ -1,83 +0,0 @@
/* -*- 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.
*/
#ifndef _ANIMBAR_H
#define _ANIMBAR_H
#include "toolbar2.h"
class CAnimation: public CWnd
{
protected:
SIZE m_iconSize;
int m_iFrameCount;
HBITMAP m_hAnimBitmap;
int m_iAnimationCount;
UINT m_uAnimationClock;
BOOL m_bInited;
BOOL m_bCaptured, m_bDepressed;
void AnimateIcon();
public:
CAnimation( CWnd *pParent );
void StopAnimation();
void StartAnimation();
protected:
afx_msg void OnPaint();
afx_msg void OnTimer(UINT);
afx_msg void OnLButtonDown( UINT nFlags, CPoint point );
afx_msg void OnMouseMove( UINT nFlags, CPoint point );
afx_msg void OnLButtonUp( UINT nFlags, CPoint point );
afx_msg void OnDestroy();
DECLARE_MESSAGE_MAP()
};
#define CAnimationBarParent CToolbarControlBar
class CAnimationBar: public CAnimationBarParent
{
protected:
POINT m_iconPt;
CAnimation *m_wndAnimation;
public:
CAnimationBar();
~CAnimationBar();
void StopAnimation();
void StartAnimation();
void PlaceToolbar(void);
protected:
#ifdef XP_WIN32
// Attributes
virtual CSize CalcFixedLayout(BOOL bStretch, BOOL bHorz);
virtual CSize CalcDynamicLayout(int nLength, DWORD dwMode );
#endif
afx_msg int OnCreate( LPCREATESTRUCT lpCreateStruct );
afx_msg void OnSize( UINT nType, int cx, int cy );
DECLARE_MESSAGE_MAP()
};
#endif

View File

@ -1,621 +0,0 @@
/* -*- 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.
*/
#include "stdafx.h"
#include "tooltip.h"
#include "animbar2.h"
#include "statbar.h"
#include "prefapi.h"
#include "custom.h"
#include "sysinfo.h"
#include "animecho.h"
#define ANIMATION_WIDTH 16
#define ANIMATION_HEIGHT 16
#define ANIMATION_WIDTH_L 32
#define ANIMATION_HEIGHT_L 32
#undef ANIMATION_PERIOD
#define ANIMATION_PERIOD (8000)
#define IDT_BUTTONFOCUS 16411
#define BUTTONFOCUS_DELAY_MS 10
#define BUTTON_WIDTH 2
// We cache the animation bitmaps for speed
HBITMAP CAnimation2::m_hSmall = NULL;
HBITMAP CAnimation2::m_hBig = NULL;
ULONG CAnimation2::m_uRefCount = 0L;
void DrawUpButton(HDC hDC, CRect & rect)
{
// Highlight (the white color)
HBRUSH br = ::CreateSolidBrush(sysInfo.m_clrBtnHilite);
CRect rc(rect.left, rect.top, rect.right-1, rect.top+1);
::FillRect(hDC, rc, br);
rc.SetRect(rect.left, rect.top, rect.left+1, rect.bottom-1);
::FillRect(hDC, rc, br);
#ifdef _WIN32
::DeleteObject(br);
// Light shadow (the light gray color)
br = ::CreateSolidBrush(::GetSysColor(COLOR_3DLIGHT));
#endif // _WIN32
rc.SetRect(rect.left+1, rect.top+1, rect.right - 2 , rect.top+2);
::FillRect(hDC, rc, br);
rc.SetRect(rect.left+1, rect.top+1, rect.left+2, rect.bottom - 2);
::FillRect(hDC, rc, br);
::DeleteObject(br);
// Shadow (the dark grey color)
br = ::CreateSolidBrush(sysInfo.m_clrBtnShadow);
rc.SetRect(rect.left+1, rect.bottom - 2, rect.right-1, rect.bottom-1);
::FillRect(hDC, rc, br);
rc.SetRect(rect.right - 2, rect.top+1, rect.right-1, rect.bottom-1);
::FillRect(hDC, rc, br);
#ifdef _WIN32
::DeleteObject(br);
// Dark Shadow (the black color)
br = ::CreateSolidBrush(::GetSysColor(COLOR_3DDKSHADOW));
#endif // _WIN32
rc.SetRect(rect.left, rect.bottom - 1, rect.right, rect.bottom);
::FillRect(hDC, rc, br);
rc.SetRect(rect.right - 1, rect.top, rect.right, rect.bottom);
::FillRect(hDC, rc, br);
::DeleteObject(br);
}
void DrawDownButton(HDC hDC, CRect & rect)
{
// Highlight (the white color)
#ifdef XP_WIN16
HBRUSH br = ::CreateSolidBrush(sysInfo.m_clrBtnShadow);
#else // _WIN32
HBRUSH br = ::CreateSolidBrush(::GetSysColor(COLOR_3DDKSHADOW));
#endif
CRect rc(rect.left, rect.top, rect.right-1, rect.top+1);
::FillRect(hDC, rc, br);
rc.SetRect(rect.left, rect.top, rect.left+1, rect.bottom-1);
::FillRect(hDC, rc, br);
#ifdef _WIN32
::DeleteObject(br);
// Light shadow (the light gray color)
br = ::CreateSolidBrush(sysInfo.m_clrBtnShadow);
#endif
rc.SetRect(rect.left+1, rect.top+1, rect.right - 2 , rect.top+2);
::FillRect(hDC, rc, br);
rc.SetRect(rect.left+1, rect.top+1, rect.left+2, rect.bottom - 2);
::FillRect(hDC, rc, br);
::DeleteObject(br);
// Shadow (the dark grey color)
#ifdef XP_WIN16
br = ::CreateSolidBrush(sysInfo.m_clrBtnHilite);
#else
br = ::CreateSolidBrush(::GetSysColor(COLOR_3DLIGHT));
#endif // _WIN16
rc.SetRect(rect.left+1, rect.bottom - 2, rect.right-1, rect.bottom-1);
::FillRect(hDC, rc, br);
rc.SetRect(rect.right - 2, rect.top+1, rect.right-1, rect.bottom-1);
::FillRect(hDC, rc, br);
#ifdef _WIN32
::DeleteObject(br);
// Dark Shadow (the black color)
br = ::CreateSolidBrush(sysInfo.m_clrBtnHilite);
#endif // _WIN32
rc.SetRect(rect.left, rect.bottom - 1, rect.right, rect.bottom);
::FillRect(hDC, rc, br);
rc.SetRect(rect.right - 1, rect.top, rect.right, rect.bottom);
::FillRect(hDC, rc, br);
::DeleteObject(br);
}
CAnimation2::CAnimation2( CWnd *pParent, LPUNKNOWN pUnk ): CWnd()
{
m_uAnimationClock = 0;
m_bInited = FALSE;
m_bCaptured = FALSE;
m_bDepressed = FALSE;
m_hAnimBitmap = NULL;
m_iAnimationCount = 0;
m_iconSize.cx = 0;
m_iconSize.cy = 0;
CreateEx(0, NULL, _T("NSAnimation"),
WS_CHILD|WS_VISIBLE,
0, 0, 0, 0,
pParent->GetSafeHwnd(), (HMENU) 101);
if( !m_bInited )
{
SetBitmap();
m_bInited = TRUE;
}
#ifdef WIN32
m_ToolTip.Create(this, TTS_ALWAYSTIP);
#else
m_ToolTip.Create(this);
#endif
if( !CUST_IsCustomAnimation( &m_iFrameCount ) )
{
m_ToolTip.AddTool(this, szLoadString(IDS_NETSCAPE_TIP));
m_ToolTip.Activate(TRUE);
m_ToolTip.SetDelayTime(250);
}
m_hFocusTimer = 0;
m_bHaveFocus = FALSE;
m_pIMWContext = NULL;
if (pUnk)
pUnk->QueryInterface( IID_IMWContext, (LPVOID *) &m_pIMWContext );
CAnimation2::m_uRefCount++;
}
CAnimation2::~CAnimation2()
{
CAnimation2::m_uRefCount--;
ASSERT( CAnimation2::m_uRefCount >= 0 );
if( !CAnimation2::m_uRefCount )
{
if( CAnimation2::m_hSmall )
{
DeleteObject( CAnimation2::m_hSmall );
CAnimation2::m_hSmall = NULL;
}
if( CAnimation2::m_hBig )
{
DeleteObject( CAnimation2::m_hBig );
CAnimation2::m_hBig = NULL;
}
}
}
BEGIN_MESSAGE_MAP(CAnimation2, CWnd)
ON_WM_ERASEBKGND()
ON_WM_PAINT()
ON_WM_TIMER()
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_WM_MOUSEMOVE()
ON_WM_DESTROY()
ON_WM_SETCURSOR()
END_MESSAGE_MAP()
BOOL CAnimation2::OnEraseBkgnd( CDC* pDC )
{
return TRUE;
}
void CAnimation2::OnPaint()
{
// Do not remove next useless line, somehow needed or
// painting will hang.
CPaintDC dc(this);
AnimateIcon();
}
void CAnimation2::OnTimer(UINT nID)
{
CWnd::OnTimer(nID);
if (nID == WIN_ANIMATE_ICON_TIMER) {
if(m_bInited)
{
m_iAnimationCount = ( m_iAnimationCount % m_iFrameCount ) + 1;
AnimateIcon();
}
}
else if(nID == IDT_BUTTONFOCUS)
{
RemoveButtonFocus();
}
}
BOOL CAnimation2::OnSetCursor( CWnd *, UINT, UINT )
{
SetCursor( theApp.LoadCursor( IDC_SELECTANCHOR ) );
return TRUE;
}
void CAnimation2::OnLButtonDown( UINT nFlags, CPoint point )
{
RECT rect;
GetClientRect(&rect);
m_bDepressed = ::PtInRect(&rect, point);
if (m_bDepressed) {
SetCapture();
m_bCaptured = TRUE;
Invalidate();
UpdateWindow();
}
MSG msg = *(GetCurrentMessage());
m_ToolTip.RelayEvent(&msg);
}
void CAnimation2::OnMouseMove( UINT nFlags, CPoint point )
{
RECT rect;
GetClientRect(&rect);
if (m_bCaptured)
{
BOOL bDepressed = ::PtInRect(&rect, point);
if (bDepressed != m_bDepressed)
{
m_bDepressed = bDepressed;
Invalidate();
UpdateWindow();
}
}
if (!m_bHaveFocus)
{
if(GetParentFrame() == GetActiveWindow() || GetParentFrame() == AfxGetMainWnd())
{
m_bHaveFocus = TRUE;
if( !CUST_IsCustomAnimation( &m_iFrameCount ) && m_hFocusTimer == 0)
{
m_hFocusTimer = SetTimer(IDT_BUTTONFOCUS, BUTTONFOCUS_DELAY_MS, NULL);
WFE_GetOwnerFrame(this)->SendMessage( WM_SETMESSAGESTRING,
(WPARAM)0, (LPARAM)szLoadString(IDS_NETSCAPE_TIP));
}
m_ToolTip.Activate(TRUE);
}
}
if(GetParentFrame() == GetActiveWindow() || GetParentFrame() == AfxGetMainWnd())
{
MSG msg = *(GetCurrentMessage());
m_ToolTip.RelayEvent(&msg);
}
}
void CAnimation2::RemoveButtonFocus()
{
POINT point;
KillTimer(IDT_BUTTONFOCUS);
m_hFocusTimer = 0;
GetCursorPos(&point);
CRect rcClient;
GetWindowRect(&rcClient);
if (!rcClient.PtInRect(point))
{
m_bHaveFocus = FALSE;
if ( WFE_GetOwnerFrame(this) != NULL) {
WFE_GetOwnerFrame(this)->SendMessage( WM_SETMESSAGESTRING,
(WPARAM) 0, (LPARAM) "" );
}
m_bDepressed = FALSE;
Invalidate();
UpdateWindow();
}
else
m_hFocusTimer = SetTimer(IDT_BUTTONFOCUS, BUTTONFOCUS_DELAY_MS, NULL);
}
void CAnimation2::OnLButtonUp( UINT nFlags, CPoint point )
{
if (m_bCaptured) {
ReleaseCapture();
m_bCaptured = FALSE;
RECT rect;
GetClientRect(&rect);
BOOL bDepressed = ::PtInRect(&rect, point);
if ( bDepressed) {
CAbstractCX * pCX = FEU_GetLastActiveFrameContext();
ASSERT(pCX != NULL);
if (pCX != NULL)
{
char *pURL = NULL;
int iError = PREF_CopyConfigString("toolbar.logo.url",&pURL);
if (PREF_ERROR != iError && pURL && *pURL) {
pCX->NormalGetUrl(pURL);
XP_FREE(pURL);
}
}
}
}
m_bDepressed = FALSE;
Invalidate();
UpdateWindow();
}
void CAnimation2::OnDestroy()
{
}
void CAnimation2::StopAnimation()
{
m_iAnimationCount = 0;
if (m_uAnimationClock)
KillTimer(m_uAnimationClock);
m_uAnimationClock = 0;
AnimateIcon();
}
void CAnimation2::StartAnimation()
{
m_iAnimationCount = 1;
if (m_uAnimationClock == 0)
{
// The animation is not currently running.
m_uAnimationClock = SetTimer(WIN_ANIMATE_ICON_TIMER, ANIMATION_PERIOD/m_iFrameCount, NULL);
// Added by Dave (4/98). DDE Hook to listen to animation.
CFrameWnd* pFrame = GetTopLevelFrame();
if (pFrame->IsKindOf(RUNTIME_CLASS(CGenericFrame)))
{
CGenericFrame* pGenFrame = (CGenericFrame*)pFrame;
CWinCX* pWinContext = pGenFrame->GetMainWinContext();
if (pWinContext)
{
DWORD dwWindowID = pWinContext->GetContextID();
CDDEAnimationEcho::Echo(dwWindowID, (DWORD)1);
}
}
}
}
void CAnimation2::AnimateIcon()
{
CClientDC dc(this);
CRect rect;
GetClientRect(&rect);
// check if our application level CDC exists
if(!theApp.pIconDC) {
theApp.pIconDC = new CDC;
theApp.pIconDC->CreateCompatibleDC(&dc);
}
HBITMAP hOldBitmap = (HBITMAP) theApp.pIconDC->SelectObject( m_hAnimBitmap );
dc.BitBlt( 2, 2,
m_iconSize.cx, m_iconSize.cy,
theApp.pIconDC,
m_iconSize.cx * m_iAnimationCount, // X offset into the strip
0,
SRCCOPY);
if (m_bDepressed)
DrawDownButton(dc.m_hDC, rect);
else DrawUpButton(dc.m_hDC, rect);
// Reselect the old object
theApp.pIconDC->SelectObject( hOldBitmap );
}
void CAnimation2::Initialize( LPUNKNOWN pUnk )
{
ASSERT(pUnk);
if (m_pIMWContext) {
m_pIMWContext->Release();
m_pIMWContext = NULL;
}
if (pUnk) {
pUnk->QueryInterface( IID_IMWContext, (LPVOID *) &m_pIMWContext );
}
}
void CAnimation2::SetBitmap( BOOL bSmall /*=TRUE*/ )
{
CDC *pDC = GetDC();
if( !CAnimation2::m_hSmall )
{
CAnimation2::m_hSmall = wfe_LoadBitmap( AfxGetResourceHandle(), pDC->m_hDC, MAKEINTRESOURCE(IDB_ANIMSMALL_0) );
ASSERT( CAnimation2::m_hSmall );
CAnimation2::m_hBig = wfe_LoadBitmap( AfxGetResourceHandle(), pDC->m_hDC, MAKEINTRESOURCE(IDB_ANIM_0) );
ASSERT( CAnimation2::m_hBig );
}
if( CUST_IsCustomAnimation( &m_iFrameCount ) )
{
ASSERT( m_iFrameCount > 0 );
m_hAnimBitmap = bSmall ? CAnimation2::m_hSmall : CAnimation2::m_hBig;
BITMAP bm;
GetObject( m_hAnimBitmap, sizeof(BITMAP), &bm );
m_iconSize.cx = bm.bmWidth / m_iFrameCount;
m_iconSize.cy = bm.bmHeight;
}
else
{
if( bSmall )
{
m_iconSize.cx = ANIMATION_WIDTH;
m_iconSize.cy = ANIMATION_HEIGHT;
m_hAnimBitmap = CAnimation2::m_hSmall;
}
else
{
m_iconSize.cx = ANIMATION_WIDTH_L;
m_iconSize.cy = ANIMATION_HEIGHT_L;
m_hAnimBitmap = CAnimation2::m_hBig;
}
BITMAP bm;
GetObject( m_hAnimBitmap, sizeof(BITMAP), &bm );
m_iFrameCount = bm.bmWidth / m_iconSize.cx;
}
ReleaseDC( pDC );
SetWindowPos( NULL, 0, 0, m_iconSize.cx+4, m_iconSize.cy+4, SWP_NOMOVE | SWP_NOZORDER );
GetParent()->SetWindowPos( NULL, 0, 0, m_iconSize.cx+4, m_iconSize.cy+4, SWP_NOMOVE | SWP_NOZORDER );
}
HBITMAP CAnimation2::GetBitmap( BOOL bSmall /*=TRUE*/ )
{
return bSmall ? CAnimation2::m_hSmall : CAnimation2::m_hBig;
}
void CAnimation2::GetSize( CSize &size )
{
size = m_iconSize;
}
/////////////////////////////////////////////////////////////////////////////
// CAnimationBar2 toolbar derived class
CAnimationBar2::CAnimationBar2( LPUNKNOWN pUnk ): CAnimationBar2Parent ()
{
m_iconPt.x = 0;
m_iconPt.y = 0;
m_wndAnimation = NULL;
m_pUnk = pUnk;
}
CAnimationBar2::~CAnimationBar2()
{
if ( m_wndAnimation ) {
m_wndAnimation->DestroyWindow();
delete m_wndAnimation;
}
}
void CAnimationBar2::StartAnimation()
{
if( !m_wndAnimation )
{
return;
}
m_wndAnimation->StartAnimation();
}
void CAnimationBar2::StopAnimation()
{
if( !m_wndAnimation )
{
return;
}
m_wndAnimation->StopAnimation();
}
void CAnimationBar2::Initialize( LPUNKNOWN pUnk )
{
m_pUnk = pUnk;
if (m_wndAnimation)
m_wndAnimation->Initialize( pUnk );
}
BEGIN_MESSAGE_MAP(CAnimationBar2, CAnimationBar2Parent)
ON_WM_CREATE()
ON_WM_SIZE()
END_MESSAGE_MAP()
int CAnimationBar2::OnCreate( LPCREATESTRUCT lpCreateStruct )
{
int res = CAnimationBar2Parent::OnCreate( lpCreateStruct );
if ( res != -1 ) {
m_wndAnimation = new CAnimation2( this, m_pUnk );
res = m_wndAnimation ? 0 : -1;
}
return res;
}
void CAnimationBar2::OnSize( UINT nType, int cx, int cy )
{
}
BOOL CAnimationBar2::OnEraseBkgnd( CDC* pDC )
{
return TRUE;
}
void CAnimationBar2::GetSize( CSize &size, BOOL bSmall /*=TRUE*/ )
{
if( !m_wndAnimation )
{
return;
}
int iFrameCount = 0;
if( CUST_IsCustomAnimation( &iFrameCount ) )
{
ASSERT( iFrameCount > 0 );
BITMAP bm;
GetObject( m_wndAnimation->GetBitmap( bSmall ), sizeof(BITMAP), &bm );
size.cx = bm.bmWidth / iFrameCount;
size.cy = bm.bmHeight;
}
else
{
size.cx = (bSmall ? ANIMATION_WIDTH : ANIMATION_WIDTH_L);
size.cy = (bSmall ? ANIMATION_HEIGHT : ANIMATION_HEIGHT_L);
}
size.cx += 4;
size.cy += 4;
}

View File

@ -1,112 +0,0 @@
/* -*- 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.
*/
#ifndef _ANIMBAR2_H
#define _ANIMBAR2_H
#include "apicx.h"
class CAnimation2: public CWnd
{
protected:
LPMWCONTEXT m_pIMWContext;
SIZE m_iconSize;
int m_iFrameCount;
HBITMAP m_hAnimBitmap;
int m_iAnimationCount;
UINT m_uAnimationClock;
BOOL m_bInited;
BOOL m_bCaptured, m_bDepressed;
static HBITMAP m_hSmall;
static HBITMAP m_hBig;
static ULONG m_uRefCount;
CNSToolTip2 m_ToolTip;
BOOL m_bHaveFocus;
UINT m_hFocusTimer;
protected:
void AnimateIcon();
public:
CAnimation2( CWnd *pParent, LPUNKNOWN pUnk = NULL);
~CAnimation2();
void StopAnimation();
void StartAnimation();
void Initialize( LPUNKNOWN pUnk);
void SetBitmap( BOOL bSmall = TRUE );
HBITMAP GetBitmap( BOOL bSmall = TRUE );
void GetSize( CSize &size );
void RemoveButtonFocus();
protected:
afx_msg BOOL OnEraseBkgnd( CDC* pDC );
afx_msg void OnPaint();
afx_msg void OnTimer(UINT);
afx_msg void OnLButtonDown( UINT nFlags, CPoint point );
afx_msg void OnMouseMove( UINT nFlags, CPoint point );
afx_msg void OnLButtonUp( UINT nFlags, CPoint point );
afx_msg void OnDestroy();
afx_msg BOOL OnSetCursor( CWnd *, UINT, UINT );
DECLARE_MESSAGE_MAP()
};
#define CAnimationBar2Parent CWnd
class CAnimationBar2: public CAnimationBar2Parent
{
protected:
LPUNKNOWN m_pUnk;
POINT m_iconPt;
CAnimation2 *m_wndAnimation;
public:
CAnimationBar2(LPUNKNOWN pUnk = NULL);
~CAnimationBar2();
void StopAnimation();
void StartAnimation();
void Initialize( LPUNKNOWN pUnk);
void SetBitmap( BOOL bSmall = TRUE ) { m_wndAnimation->SetBitmap( bSmall ); }
void GetSize( CSize &size, BOOL bSmall = TRUE );
protected:
#ifdef XP_WIN32
// Attributes
// virtual CSize CalcFixedLayout(BOOL bStretch, BOOL bHorz);
#endif
afx_msg int OnCreate( LPCREATESTRUCT lpCreateStruct );
afx_msg void OnSize( UINT nType, int cx, int cy );
afx_msg BOOL OnEraseBkgnd( CDC* pDC );
DECLARE_MESSAGE_MAP()
};
#endif

View File

@ -1,72 +0,0 @@
/* -*- 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 "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS IS"
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
* the License for the specific language governing rights and limitations
* under the License.
*
* The Original Code is Mozilla Communicator client code.
*
* The Initial Developer of the Original Code is Netscape Communications
* Corporation. Portions created by Netscape are Copyright (C) 1998
* Netscape Communications Corporation. All Rights Reserved.
*/
#include "stdafx.h"
#include "animecho.h"
#include "wfedde.h"
// Static property.
CPtrList CDDEAnimationEcho::m_Registry;
void CDDEAnimationEcho::Echo(DWORD dwWindowID, DWORD dwState)
{
// Go through the registry.
CDDEAnimationEcho *pItem;
POSITION rIndex = m_Registry.GetHeadPosition();
while(rIndex != NULL)
{
pItem = (CDDEAnimationEcho*)m_Registry.GetNext(rIndex);
pItem->EchoAnimation(dwWindowID, dwState);
}
}
void CDDEAnimationEcho::DDERegister(CString &csServiceName)
{
// Just create the item. Our job's done.
CDDEAnimationEcho *pDontCare = new CDDEAnimationEcho(csServiceName);
}
BOOL CDDEAnimationEcho::DDEUnRegister(CString &csServiceName)
{
// Go through all registered items.
POSITION rIndex = m_Registry.GetHeadPosition();
CDDEAnimationEcho *pDelMe;
while (rIndex != NULL)
{
pDelMe = (CDDEAnimationEcho*)m_Registry.GetNext(rIndex);
if(pDelMe->GetServiceName() == csServiceName)
{
delete pDelMe;
return TRUE;
}
}
return FALSE;
}
void CDDEAnimationEcho::EchoAnimation(DWORD dwWindowID, DWORD dwState)
{
CDDEWrapper::AnimationEcho(this, dwWindowID, dwState);
}

View File

@ -1,62 +0,0 @@
/* -*- 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 "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS IS"
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
* the License for the specific language governing rights and limitations
* under the License.
*
* The Original Code is Mozilla Communicator client code.
*
* The Initial Developer of the Original Code is Netscape Communications
* Corporation. Portions created by Netscape are Copyright (C) 1998
* Netscape Communications Corporation. All Rights Reserved.
*/
#ifndef __ANIMECHO_H
// Avoid include redundancy
//
#define __ANIMECHO_H
class CDDEAnimationEcho
{
protected:
static CPtrList m_Registry;
POSITION m_rIndex;
CString m_csServiceName;
CDDEAnimationEcho(CString& csServiceName)
{
m_rIndex = m_Registry.AddTail(this);
m_csServiceName = csServiceName;
}
~CDDEAnimationEcho()
{
m_Registry.RemoveAt(m_rIndex);
}
// Must override.
void EchoAnimation(DWORD dwWindowID, DWORD dwAnimationState);
public:
CString GetServiceName() {
return(m_csServiceName);
}
// Consider these the constructor, destructor.
static void DDERegister(CString &csServiceName);
static BOOL DDEUnRegister(CString &csServiceName);
static void Echo(DWORD dwWindowID, DWORD dwAnimationState);
};
#endif // __URLECHO_H

View File

@ -1,305 +0,0 @@
/* -*- 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.
*/
#ifndef __APIADDR_H
#define __APIADDR_H
#ifndef __APIAPI_H
#include "apiapi.h"
#endif
#ifndef __NSGUIDS_H
#include "nsguids.h"
#endif
#include "abcom.h"
typedef enum {NC_NameComplete, NC_Expand, NC_RFC822, NC_None} NameCompletionEnum;
class IAddressParent
{
public:
virtual void AddedItem (
HWND hwnd,
LONG id,
int index
) = 0;
virtual int ChangedItem (
char * pString,
int index,
HWND hwnd,
char ** ppFullName,
unsigned long* entryID,
UINT* bitmapID
) = 0;
virtual void DeletedItem (
HWND hwnd,
LONG id,
int index
) = 0;
virtual char * NameCompletion (
char * pString
) = 0;
virtual void StartNameCompletionSearch(
void
)=0;
virtual void StopNameCompletionSearch(
void
)=0;
virtual void SetProgressBarPercent(
int32 lPercent
)=0;
virtual void SetStatusText(
const char* pMessage
)=0;
virtual CWnd *GetOwnerWindow(
void
)=0;
};
typedef IAddressParent * LPADDRESSPARENT;
// Address control API
#define APICLASS_ADDRESSCONTROL "AddressControl"
typedef struct {
ULONG ulHeaderType;
char * szAddress;
UINT idBitmap;
ULONG idEntry;
} NSADDRESSLIST;
typedef NSADDRESSLIST * LPNSADDRESSLIST;
#define WM_CHILDLOSTFOCUS WM_USER+600
#define WM_LEAVINGLASTFIELD WM_USER+601
#define WM_UPDATEHEADERTYPE WM_USER+602
#define WM_UPDATEHEADERCONTENTS WM_USER+603
#define WM_NOTIFYSELECTIONCHANGE WM_USER+604
#define WM_DISPLAYTYPELIST WM_USER+605
class CNSAddressList;
class CNSAddressTypeControl;
class IAddressControl
{
public:
virtual BOOL AddAddressType (
char * pszChoice,
UINT pidBitmap = 0,
BOOL bExpand = TRUE,
BOOL bHidden = FALSE,
BOOL bExclusive = FALSE,
DWORD dwUserData = 0
) = 0;
virtual void SetDefaultBitmapId (
int id = 0
) = 0;
virtual int GetDefaultBitmapId (
void
) = 0;
virtual BOOL RemoveSelection (
int nIndex = -1
) = 0;
virtual int AppendEntry (
BOOL expandName = TRUE,
LPCTSTR szType = 0,
LPCTSTR szName = 0,
UINT idBitmap = 0,
unsigned long idEntry = 0
) = 0;
virtual int InsertEntry(
int nIndex,
BOOL expandName = TRUE,
LPCTSTR szType = 0,
LPCTSTR szName = 0,
UINT idBitmap = 0,
unsigned long idEntry = 0
) = 0;
virtual BOOL SetEntry (
int nIndex,
LPCTSTR szType = 0,
LPCTSTR szName = 0,
UINT idBitmap = 0,
unsigned long idEntry = 0
) = 0;
virtual BOOL GetEntry (
int nIndex,
char ** szType = 0,
char ** szName = 0,
UINT * idBitmap = 0,
unsigned long * idEntry = 0
) = 0;
virtual int GetItemFromPoint(
LPPOINT point
) = 0;
virtual BOOL DeleteEntry (
int nIndex
) = 0;
virtual int FindEntry (
int nStart,
LPCTSTR lpszName
) = 0;
virtual BOOL Create (
CWnd *pParent,
int id = 1000
) = 0;
virtual CListBox * GetAddressTypeComboBox (
void
) = 0;
virtual CEdit * GetAddressNameField (
void
) = 0;
virtual void SetItemName (
int nIndex,
char * text
) = 0;
virtual void SetItemBitmap (
int nIndex,
UINT id
) = 0;
virtual void SetItemEntryID (
int nIndex,
unsigned long id
) = 0;
virtual void SetControlParent (
LPADDRESSPARENT pIAddressParent
) = 0;
virtual int GetAddressList (
LPNSADDRESSLIST * ppAdressList
) = 0;
virtual int SetAddressList (
LPNSADDRESSLIST pAddressList,
int count
) = 0;
virtual CListBox * GetListBox(
void
) = 0;
virtual BOOL IsCreated(
void
) = 0;
virtual int SetSel(
int nIndex,
BOOL bSelected
) = 0;
virtual void SetContext(
MWContext *pContext
) = 0;
virtual MWContext *GetContext(
void
) = 0;
#define ADDRESS_TYPE_FLAG UINT
#define ADDRESS_TYPE_FLAG_VALUE 0x1
#define ADDRESS_TYPE_FLAG_HIDDEN 0x2
#define ADDRESS_TYPE_FLAG_EXCLUSIVE 0x4
#define ADDRESS_TYPE_FLAG_BITMAP 0x8
#define ADDRESS_TYPE_FLAG_USER 0x10
virtual void GetTypeInfo(
int nIndex,
ADDRESS_TYPE_FLAG flag,
void ** value
) = 0;
virtual void EnableParsing(
BOOL bParse = TRUE
) = 0;
virtual BOOL GetEnableParsing(
void
)=0;
virtual void EnableExpansion(
BOOL bExpand = TRUE
)=0;
virtual BOOL GetEnableExpansion(
void
)=0;
virtual void SetCSID (
int16 csid = 0
) = 0;
virtual void ShowNameCompletionPicker(
CWnd *pParent = NULL
)=0;
virtual void StartNameCompletion(
int nIndex = -1
)=0;
virtual void StopNameCompletion(
int nIndex = -1,
BOOL bEraseCookie = TRUE
)=0;
virtual void SetEntryHasNameCompletion(
BOOL bHasNameCompletion = TRUE,
int nIndex = -1
)=0;
virtual BOOL GetEntryHasNameCompletion(
int nIndex = -1
)=0;
virtual void SetNameCompletionCookieInfo(
AB_NameCompletionCookie *pCookie,
int nNumResults,
NameCompletionEnum ncEnum,
int nIndex = -1)=0;
virtual void GetNameCompletionCookieInfo(
AB_NameCompletionCookie **pCookie,
int *pNumResults,
int nIndex = -1)=0;
};
typedef IAddressControl * LPADDRESSCONTROL;
#define ApiAddressControl(v,unk) APIPTRDEF(IID_IAddressControl,IAddressControl,v,unk)
#endif

View File

@ -1,610 +0,0 @@
/* -*- 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.
*/
#include "stdafx.h"
#include "apiapi.h" // get all global interfaces
class CAPIList {
protected:
CAPIList * m_pNext;
CAPIList * m_pPrevious;
void * m_pData;
public:
CAPIList(void * pData = NULL);
~CAPIList();
long elements(void);
CAPIList * Add(void * element);
CAPIList * Remove(void * element);
void * GetAt (int element);
inline CAPIList * GetNext(void) {
return m_pNext;
}
inline CAPIList * GetPrevious(void) {
return m_pPrevious;
}
inline CAPIList * SetNext(CAPIList * pElement) {
CAPIList * pNext = m_pNext;
m_pNext = pElement;
return pNext;
}
inline CAPIList * SetPrevious(CAPIList * pElement) {
CAPIList * pPrevious = m_pPrevious;
m_pPrevious = pElement;
return pPrevious;
}
inline void * GetData(void) { return m_pData; }
};
CAPIList::CAPIList(void * pData)
{
m_pNext = NULL;
m_pPrevious = NULL;
SetNext(this);
SetPrevious(this);
m_pData = pData;
}
CAPIList::~CAPIList()
{
assert(m_pNext);
assert(m_pPrevious);
GetPrevious()->SetNext(GetNext());
GetNext()->SetPrevious(GetPrevious());
}
CAPIList * CAPIList::Add(void * element)
{
CAPIList * pNode = new CAPIList(element);
CAPIList * pOld = SetNext(pNode);
pNode->SetNext(pOld);
pOld->SetPrevious(pNode);
pNode->SetPrevious(this);
return pNode;
}
long CAPIList::elements(void)
{
CAPIList * pNode = this;
long lcount = 0;
do {
lcount++;
pNode = pNode->GetNext();
} while (pNode != this);
return lcount;
}
CAPIList * CAPIList::Remove(void * element)
{
BOOL found = FALSE;
CAPIList * pNode = this;
do {
if (pNode->GetData() == element) {
found = TRUE;
break;
}
pNode = pNode->GetNext();
} while (pNode != this);
if (found) {
if (GetNext() == this) {
delete this;
return NULL;
}
else {
CAPIList * ptr = pNode->GetPrevious();
delete pNode;
return ptr;
}
}
return this;
}
void * CAPIList::GetAt ( int element )
{
CAPIList * pNode = this;
do {
if (!element)
return pNode->GetData();
element--;
pNode = pNode->GetNext();
} while (pNode != this);
return NULL;
}
// the API repository implements the APIAPI interface and maintains
// the list of APIs, their IDs, and reference counts.
class ApiEntry {
protected:
LPUNKNOWN m_pUnk;
APISIGNATURE m_apiSig;
public:
ApiEntry(LPUNKNOWN pUnk = NULL, APISIGNATURE apiSig = NULL ) {
m_pUnk =pUnk;
m_apiSig = apiSig;
}
inline LPUNKNOWN GetUnk() { return m_pUnk; }
inline APISIGNATURE GetSig() { return m_apiSig; }
inline void SetSig(APISIGNATURE apiSig) { m_apiSig = apiSig; }
inline void SetUnk(LPUNKNOWN pUnk) { m_pUnk = pUnk; }
};
class ClassFactory { // class factory entries
public:
LPCLASSFACTORY m_pClassFactory; // class instance creation factory
char * m_pszClassName; // name of class
BOOL m_bIsLoaded; // is class factory loaded?
char * m_pszModuleName; // module containing class factory
HMODULE m_hModule; // factory dll instance
CAPIList * m_ApiList; // list of api instances
ClassFactory (char * pszClassName, LPCLASSFACTORY pFactory, char * pszModule = 0 );
~ClassFactory();
LPUNKNOWN CreateClassInstance(LPUNKNOWN pUnkOuter, APISIGNATURE apiSig = NULL);
LPUNKNOWN GetFirst(void);
LPUNKNOWN GetNext(LPUNKNOWN);
void Insert(LPUNKNOWN pUnk,APISIGNATURE apiSig = NULL);
void Remove(LPUNKNOWN);
LPUNKNOWN LocateBySignature(APISIGNATURE);
BOOL AttemptToLoad(void);
};
void ClassFactory::Insert(
LPUNKNOWN pUnk,
APISIGNATURE apiSig
)
{
if (!m_ApiList) {
m_ApiList = new CAPIList((void*)(new ApiEntry(pUnk,apiSig)));
}
else {
m_ApiList = m_ApiList->Add((void*)(new ApiEntry(pUnk,apiSig)));
}
}
void ClassFactory::Remove(LPUNKNOWN pUnk)
{
if (m_ApiList) {
ApiEntry * pEntry;
for (int i = 0; i < m_ApiList->elements(); i++) {
pEntry = (ApiEntry *)m_ApiList->GetAt(i);
assert(pEntry);
if (pEntry->GetUnk() == pUnk) {
m_ApiList = m_ApiList->Remove((void*)pEntry);
delete pEntry;
return;
}
}
}
}
LPUNKNOWN ClassFactory::GetFirst(void)
{
if (!m_ApiList)
return 0;
if (!m_ApiList->elements())
return 0;
return ((ApiEntry *)(m_ApiList->GetAt(0)))->GetUnk();
}
LPUNKNOWN ClassFactory::GetNext(LPUNKNOWN pUnk)
{
if (m_ApiList) {
for (int i = 0; i < m_ApiList->elements() - 1; i++)
if (((ApiEntry*)m_ApiList->GetAt(i))->GetUnk() == (void*)pUnk)
return ((ApiEntry*)m_ApiList->GetAt(i+1))->GetUnk();
}
return 0;
}
LPUNKNOWN ClassFactory::LocateBySignature(APISIGNATURE apiSig)
{
if (!apiSig || !m_ApiList)
return NULL;
ApiEntry * pEntry;
for (int i = 0; i < m_ApiList->elements(); i++) {
pEntry = (ApiEntry*)m_ApiList->GetAt(i);
if (APISIGCMP(pEntry->GetSig(),apiSig))
return pEntry->GetUnk();
}
return NULL;
}
ClassFactory::ClassFactory(char * pszClassName, LPCLASSFACTORY pFactory, char * pszModule)
{
assert(pszClassName);
m_pClassFactory = pFactory;
m_pszClassName = strdup(pszClassName);
m_hModule = NULL;
m_ApiList = NULL;
if (pszModule != 0) {
m_pszModuleName = strdup(pszModule);
m_bIsLoaded = FALSE;
}
else {
m_bIsLoaded = TRUE;
m_pszModuleName = NULL;
}
}
ClassFactory::~ClassFactory()
{
if (m_pszClassName != NULL)
free (m_pszClassName);
if (m_pszModuleName != NULL)
free (m_pszModuleName);
if (m_hModule != NULL)
FreeLibrary(m_hModule);
int elements;
elements = m_ApiList ? (int)m_ApiList->elements( ): 0;
while ( elements ) {
ApiEntry * pEntry = (ApiEntry *)m_ApiList->GetAt(elements - 1);
assert(pEntry);
LPUNKNOWN entry = (LPUNKNOWN)pEntry->GetUnk();
// FIXME release objects here!
if (entry)
while (entry->Release())
;
delete pEntry;
elements--;
}
}
LPUNKNOWN ClassFactory::CreateClassInstance(
LPUNKNOWN pUnkOuter,
APISIGNATURE apiSig)
{
assert(m_pClassFactory);
LPUNKNOWN pUnknown;
if (m_pClassFactory->CreateInstance(
pUnkOuter, IID_IUnknown, (LPVOID*)&pUnknown) == NOERROR)
Insert(pUnknown,apiSig);
return pUnknown;
}
class ClassRepository : public CGenericFactory,
public IApiapi {
protected:
ULONG m_ulRefCount;
CAPIList * m_ClassList;
// lookup attempts to find an API entry based on id
ClassFactory * Lookup (char * pszClassName);
ClassFactory * GetFirst(void);
ClassFactory * GetNext(ClassFactory *);
void Remove(ClassFactory*);
public:
ClassRepository ( );
~ClassRepository ( );
// IClassFactory Interface
STDMETHODIMP CreateInstance(LPUNKNOWN,REFIID,LPVOID*);
// IApiapi interface
LPUNKNOWN GetFirstInstance(APICLASS lpszClassName);
LPUNKNOWN GetNextInstance(APICLASS lpszClassName, LPUNKNOWN pUnk );
void * GetFirstApiInstance( REFIID refiid, LPUNKNOWN * ppUnk);
int RemoveInstance( LPUNKNOWN pUnk );
LPUNKNOWN CreateClassInstance (
APICLASS lpszClassName,LPUNKNOWN pUnkOuter,APISIGNATURE apiSig);
int RegisterClassFactory (
APICLASS lpszClassName, LPCLASSFACTORY pClassFactory, char * szModuleName = 0);
};
ClassRepository::ClassRepository ( )
{
m_ClassList = NULL;
RegisterClassFactory(APICLASS_APIAPI,(LPCLASSFACTORY)this);
}
ClassRepository::~ClassRepository ( )
{
if (m_ClassList) {
int elements = (int)m_ClassList->elements( );
while ( elements ) {
elements--;
}
}
}
STDMETHODIMP ClassRepository::CreateInstance(
LPUNKNOWN pUnkOuter,REFIID refiid, LPVOID * ppvObj)
{
*ppvObj = NULL;
ClassRepository * pRepository = new ClassRepository;
return pRepository->QueryInterface(refiid,ppvObj);
}
int ClassRepository::RemoveInstance( LPUNKNOWN pUnk )
{
if (m_ClassList) {
int elements = (int) m_ClassList->elements();
int i;
for ( i = 0; i < elements; i++ ) {
ClassFactory * entry = (ClassFactory *)m_ClassList->GetAt(i);
entry->Remove(pUnk);
}
}
return 0;
}
ClassFactory * ClassRepository::GetFirst(void)
{
if (!m_ClassList)
return 0;
if (!m_ClassList->elements())
return 0;
return (ClassFactory *)m_ClassList->GetAt(0);
}
ClassFactory * ClassRepository::GetNext(ClassFactory * pFactory)
{
if (m_ClassList) {
for (int i = 0; i < m_ClassList->elements() - 1; i++)
if (m_ClassList->GetAt(i) == (void*)pFactory)
return (ClassFactory *)m_ClassList->GetAt(i+1);
}
return 0;
}
void ClassRepository::Remove(ClassFactory * pFactory)
{
if (m_ClassList)
m_ClassList = m_ClassList->Remove((void*)pFactory);
}
LPUNKNOWN ClassRepository::CreateClassInstance(
APICLASS lpszClassName,
LPUNKNOWN pUnkOuter,
APISIGNATURE apiSig )
{
ClassFactory * pFactory = Lookup(lpszClassName);
if (pFactory) {
if (apiSig) {
LPUNKNOWN pUnk;
if ((pUnk = pFactory->LocateBySignature(apiSig)) != NULL)
return pUnk;
}
return pFactory->CreateClassInstance(pUnkOuter,apiSig);
}
return NULL;
}
BOOL ClassFactory::AttemptToLoad(void)
{
if ((!m_pszModuleName) || m_bIsLoaded)
return FALSE;
// attempt to load the interface module (DLL)
m_hModule = LoadLibrary (m_pszModuleName);
if (m_hModule > (HMODULE)32) {
// The class factory initializer is the first routine in the DLL.
APIBOOTER fpApiInitialize =
(APIBOOTER)GetProcAddress(m_hModule,MAKEINTRESOURCE(1));
// if we got a valid initializer, then call it with the
// class name. This was the module can initialize one at
// a time if it likes.
if (fpApiInitialize != NULL ) {
m_bIsLoaded = TRUE;
if ((*fpApiInitialize)(m_pszClassName))
return TRUE;
}
else
m_bIsLoaded = FALSE;
}
else {
// couldn't load the module
char szMessage[1024];
sprintf ( szMessage, "Cannot load module: %.800s\nClass factory %800s",
m_pszModuleName, m_pszClassName);
MessageBox ( 0, szMessage, "Interface Error", MB_OK | MB_ICONEXCLAMATION );
}
return FALSE;
}
ClassFactory * ClassRepository::Lookup ( char * pszClassName )
{
// get the number of stored elements
if (m_ClassList) {
int elements = (int) m_ClassList->elements();
int i;
// look up the api
for ( i = 0; i < elements; i++ ) {
ClassFactory * entry = (ClassFactory *)m_ClassList->GetAt(i);
if (!stricmp(entry->m_pszClassName, pszClassName)) {
if (!entry->m_bIsLoaded)
if (entry->AttemptToLoad())
return entry;
else
return 0;
return entry;
}
}
}
return 0;
}
int ClassRepository::RegisterClassFactory (
char * pszClassName,
LPCLASSFACTORY pClassFactory,
char * szModuleName )
{
ClassFactory * pClassEntry;
if ((pClassEntry = Lookup (pszClassName)) != 0) {
pClassEntry->m_pClassFactory = pClassFactory;
return 1;
}
else {
pClassEntry = new ClassFactory ( pszClassName, pClassFactory, szModuleName);
if (!m_ClassList)
m_ClassList = new CAPIList((void*)pClassEntry);
else
m_ClassList = m_ClassList->Add ((void*)pClassEntry );
}
return 0;
}
void * ClassRepository::GetFirstApiInstance( REFIID refiid, LPUNKNOWN * ppUnk)
{
void * pSomeInterface;
*ppUnk = 0;
ClassFactory * pClass = GetFirst();
while (pClass) {
LPUNKNOWN pUnk = pClass->GetFirst();
while (pUnk) {
if (pUnk->QueryInterface(refiid,(LPVOID*)&pSomeInterface) == NOERROR) {
*ppUnk = pUnk;
return pSomeInterface;
}
pUnk = pClass->GetNext(pUnk);
}
pClass = GetNext(pClass);
}
return NULL;
}
// function looks up an API by id and returns a void pointer which in
// turn can be cast to the requested interface type. This is done
// for you by the Api<id,interf> template.
LPUNKNOWN ClassRepository::GetFirstInstance ( char * pszClassName )
{
if (m_ClassList) {
for (int i = 0; i < m_ClassList->elements(); i++) {
ClassFactory * pClassFactory = (ClassFactory *)m_ClassList->GetAt(i);
if (!stricmp(pClassFactory->m_pszClassName, pszClassName)) {
if (pClassFactory->m_ApiList)
return ((ApiEntry*)pClassFactory->m_ApiList->GetAt(0))->GetUnk();
return NULL;
}
}
}
return NULL;
}
LPUNKNOWN ClassRepository::GetNextInstance ( char * pszClassName, LPUNKNOWN pUnk )
{
if (m_ClassList) {
for (int i = 0; i < m_ClassList->elements(); i++) {
ClassFactory * pClassFactory = (ClassFactory *)m_ClassList->GetAt(i);
if (!stricmp(pClassFactory->m_pszClassName, pszClassName)) {
CAPIList * pList = pClassFactory->m_ApiList;
if (pList)
for (int j = 0; j<pList->elements()-1; j++)
if (((ApiEntry*)pList->GetAt(j))->GetUnk() == pUnk)
return ((ApiEntry*) pClassFactory->m_ApiList->GetAt(j+1))->GetUnk();
return NULL;
}
}
}
return NULL;
}
// The apiapi object MUST be constructed first, this pragma ensures that
// the static constructor will occur before any other static construction
// happens.
#pragma warning( disable : 4074 )
#pragma init_seg(compiler)
static ClassRepository classRepository;
// global function gets the ApiApi from the static repository
// From here, all registered APIs can be retrieved and set
API_PUBLIC(LPAPIAPI) GetAPIAPI()
{
return (LPAPIAPI) &classRepository;
}
// Generic Objects
// Generic Factory
STDMETHODIMP CGenericFactory::QueryInterface(REFIID refiid, LPVOID * ppv)
{
*ppv = NULL;
if (IsEqualIID(refiid,IID_IUnknown))
*ppv = (LPUNKNOWN) this;
else if (IsEqualIID(refiid,IID_IClassFactory))
*ppv = (LPCLASSFACTORY) this;
if (*ppv != NULL) {
AddRef();
return NOERROR;
}
return ResultFromScode(E_NOINTERFACE);
}
STDMETHODIMP_(ULONG) CGenericFactory::AddRef(void)
{
return ++m_ulRefCount;
}
STDMETHODIMP_(ULONG) CGenericFactory::Release(void)
{
ULONG ulRef;
ulRef = --m_ulRefCount;
if (m_ulRefCount == 0) ;
// delete this;
return ulRef;
}
STDMETHODIMP CGenericFactory::CreateInstance(
LPUNKNOWN pUnkOuter,REFIID refiid, LPVOID * ppvObj)
{
return NULL;
// User Implemented
}
STDMETHODIMP CGenericFactory::LockServer(BOOL fLock)
{
return NOERROR;
}
// Generic Object
STDMETHODIMP CGenericObject::QueryInterface(REFIID refiid, LPVOID * ppv)
{
return ResultFromScode(E_NOINTERFACE);
}
STDMETHODIMP_(ULONG) CGenericObject::AddRef(void)
{
return ++m_ulRefCount;
}
STDMETHODIMP_(ULONG) CGenericObject::Release(void)
{
ULONG ulRef;
ulRef = --m_ulRefCount;
if (m_ulRefCount == 0) {
classRepository.RemoveInstance(this);
delete this;
}
return ulRef;
}

View File

@ -1,191 +0,0 @@
/* -*- 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.
*/
// APIAPI.H This header file containes the main api repository
// interface. Use the APIAPI to register interfaces and retrieve
// registered interfaces.
#ifndef __APIAPI_H
#define __APIAPI_H
#ifdef _WIN32
#include "objbase.h"
#else
#include <memory.h>
#include "compobj.h"
#endif
#include "assert.h"
#define APIID(id,x) DEFINE_GUID(id,0x30611040 + x,0x8c7a,0x11cf,0xac,0x4c,0x44,0x45,0x53,0x54,0x00,0x00);
APIID(IID_IApiapi,0); // base id
typedef enum {
ApiPrivate = 0x0,
ApiPublic
} APIEXPORT;
typedef int (*APIBOOTER)(char *);
typedef char * APICLASS;
typedef void * APISIGNATURE;
#define APISIGCMP(a,b) ((a)==(b))
#define APICLASS_APIAPI "APIAPI"
class IApiapi {
public:
virtual LPUNKNOWN GetFirstInstance (
APICLASS lpszClassName
) = 0;
virtual LPUNKNOWN GetNextInstance (
APICLASS lpszClassName,
LPUNKNOWN pUnk
) = 0;
virtual void * GetFirstApiInstance (
REFIID refiid,
LPUNKNOWN * ppUnk
) = 0;
virtual int RemoveInstance(
LPUNKNOWN pUnk
) = 0;
virtual LPUNKNOWN CreateClassInstance (
APICLASS lpszClassName,
LPUNKNOWN pUnkOuter = NULL,
APISIGNATURE apiSig = 0
) = 0;
virtual int RegisterClassFactory (
APICLASS lpszClassName,
LPCLASSFACTORY pUnknown,
char * szModuleName = 0
) = 0;
};
typedef IApiapi * LPAPIAPI;
#ifdef WIN32
#ifdef __BORLANDC__
#define API_PUBLIC(__x) __x
#else
#define API_PUBLIC(__x) _declspec(dllexport) __x
#endif
#else
#define API_PUBLIC(__x) __x _cdecl _export _loadds
#endif
extern "C" {
API_PUBLIC(LPAPIAPI) GetAPIAPI(void);
}
class ApiApi {
public:
IApiapi * m_Apiapi;
ApiApi ( )
{
m_Apiapi = GetAPIAPI();
assert(m_Apiapi);
}
IApiapi * operator -> ( )
{
return m_Apiapi;
}
};
class ApiPtr {
protected:
LPUNKNOWN m_pUnknown;
void * m_pSomeInterface;
public:
ApiPtr ( REFIID apiid, LPUNKNOWN pUnknown = 0 )
{
if (!pUnknown) {
LPAPIAPI pApiapi = GetAPIAPI();
assert(pApiapi);
m_pSomeInterface = pApiapi->GetFirstApiInstance(apiid,&m_pUnknown);
m_pUnknown = NULL;
}
else {
m_pUnknown = pUnknown;
assert(pUnknown->QueryInterface(apiid,(LPVOID*)&m_pSomeInterface)==NOERROR);
}
}
~ApiPtr ( )
{
if (m_pUnknown)
m_pUnknown->Release();
}
void * GetAPI ( )
{
return m_pSomeInterface;
}
};
#define APIPTRDEF(apiid,i,v,unk) ApiPtr v##_ptr(apiid,unk); \
i * v = (i *)v##_ptr.GetAPI();
#define ApiApiPtr(v) LPAPIAPI v = GetAPIAPI()
#define DECLARE_FACTORY(f) static f __##f
// Generic Classes
class CGenericObject : public IUnknown
{
protected:
ULONG m_ulRefCount;
public:
CGenericObject ( ) {
m_ulRefCount = 0;
}
virtual ~CGenericObject() {}
// IUnknown Interface
STDMETHODIMP QueryInterface(REFIID,LPVOID *);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
};
class CGenericFactory : public IClassFactory
{
protected:
ULONG m_ulRefCount;
public:
CGenericFactory ( ) {
m_ulRefCount = 0;
}
// IUnknown Interface
STDMETHODIMP QueryInterface(REFIID,LPVOID *);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
// IClassFactory Interface
STDMETHODIMP CreateInstance(LPUNKNOWN,REFIID,LPVOID*);
STDMETHODIMP LockServer(BOOL);
};
#endif

View File

@ -1,177 +0,0 @@
/* -*- 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.
*/
#ifndef APICHROM_H
#define APICHROM_H
#ifndef __APIAPI_H
#include "apiapi.h"
#endif
#ifndef __NSGUIDS_H
#include "nsguids.h"
#endif
#define APICLASS_CHROME "Chrome"
#define APICLASS_NSTOOLBAR "NSToolBar"
class CToolbarButton;
class CCustToolbar;
class INSToolBar: public IUnknown {
public:
// Initialization
virtual int Create( CFrameWnd *pParent,
DWORD dwStyle = WS_CHILD|WS_VISIBLE|CBRS_TOP,
UINT nID = AFX_IDW_TOOLBAR ) = 0;
virtual void SetSizes( SIZE sizeButton,
SIZE sizeImage ) = 0;
virtual void SetButtons( const UINT *lpIDArray,
int nIDCount, UINT nBitmapID = 0 ) = 0;
virtual void SetButtonStyle( UINT nIDButtonCommand, DWORD dwButtonStyle ) = 0;
virtual void GetButtonRect( UINT nIDButtonCommand, RECT * pRect ) = 0;
virtual void AddButton( CToolbarButton *pButton, int index = -1 ) = 0;
virtual void RemoveAllButtons() = 0;
virtual CToolbarButton *RemoveButton( int index ) = 0;
virtual CToolbarButton *GetButtonByIndex(int index) = 0;
virtual CToolbarButton *GetButtonByID(int nCmd) = 0;
virtual BOOL LoadBitmap( LPCSTR lpszResourceName ) = 0;
// State
virtual void SetToolbarStyle( int nToolbarStyle ) = 0;
virtual void Show( BOOL bShow = TRUE ) = 0;
// should the buttons be the same width or their own size
virtual void SetButtonsSameWidth(BOOL bSameWidth) = 0;
// Data Access
virtual HWND GetHWnd() = 0;
};
typedef INSToolBar *LPNSTOOLBAR;
class CNetscapeStatusBar;
class INSStatusBar: public IUnknown {
public:
virtual int Create( CWnd* pParentWnd,
DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_BOTTOM,
UINT nID = AFX_IDW_STATUS_BAR,
BOOL bxxx = TRUE, BOOL bTaskbar = TRUE ) = 0;
virtual void Attach( CNetscapeStatusBar *pBar ) = 0;
// Messages
virtual void SetStatusText(const char * = NULL) = 0;
virtual const char *GetStatusText() = 0;
// Progress
virtual void SetProgress(int = 0) = 0;
virtual int GetProgress() = 0;
virtual void ProgressComplete() = 0;
// Create/Remove a modal status window
virtual void ModalStatus( BOOL bModal, UINT uDelay, char * szTitle = NULL ) = 0;
virtual void Show( BOOL bShow = TRUE ) = 0;
virtual HWND GetHWnd() = 0;
// status mode cues
virtual void StartAnimation() = 0;
virtual void StopAnimation() = 0;
};
typedef INSStatusBar *LPNSSTATUSBAR;
#define ApiToolBar(v,unk) APIPTRDEF(IID_INSToolBar,INSToolBar,v,unk)
class INSAnimation: public IUnknown {
public:
virtual void StartAnimation() = 0;
virtual void StopAnimation() = 0;
};
typedef INSAnimation *LPNSANIMATION;
#define ApiAnimation(v,unk) APIPTRDEF(IID_INSAnimation,INSAnimation,v,unk)
class IChrome: public IUnknown {
public:
// Initialization
virtual void Initialize(CFrameWnd *pWnd) = 0;
virtual BOOL procTabNavigation( UINT nChar, UINT forward, UINT controlKey ) = 0;
// Menu bar stuff
virtual void SetMenu( UINT ) = 0;
// General Toolbar functionality
virtual void UpdateURLBars(char* url) = 0;
virtual void ShowToolbar(UINT nToolbarID, BOOL bShow = TRUE) = 0;
virtual BOOL GetToolbarVisible(UINT nToolbarID) = 0;
virtual CWnd *GetToolbar(UINT nToolbarID) = 0;
virtual void SetToolbarFocus(UINT nToolbarID) = 0;
// nPos, bOpen, and bShowing are IN/OUT parameters. Values going in are default values and values
// coming out are the values from the registry or default if not in the registry.
virtual void LoadToolbarConfiguration(UINT nToolbarID, CString &csToolbarName, int32 & nPos, BOOL & bOpen, BOOL & bShowing) = 0;
virtual void SaveToolbarConfiguration(UINT nToolbarID, CString &csToolbarName) = 0;
virtual void SetSaveToolbarInfo(BOOL bSaveToolbarInfo) = 0;
// Animation Stuff
virtual void StartAnimation() = 0;
virtual void StopAnimation() = 0;
// Configurable Toolbar Manager stuff
virtual int CreateRDFToolbar(CString toolbarName, int nMaxToolbars, BOOL bHasAnimation)=0;
virtual int CreateCustomizableToolbar(CString toolbarName, int nMaxToolbars, BOOL bHasAnimation)=0;
virtual int CreateCustomizableToolbar(UINT nStringID, int nMaxToolbars, BOOL bHasAnimation) = 0;
virtual CString GetCustToolbarString() = 0;
virtual void RenameCustomizableToolbar(UINT nStringID) = 0;
virtual void FinishedAddingBrowserToolbars()=0;
virtual void SetToolbarStyle( int nToolbarStyle )=0;
virtual void ToolbarActivation()=0;
virtual BOOL CustToolbarShowing()=0;
virtual void ViewCustToolbar(BOOL bShow) = 0;
virtual void Customize()=0;
virtual CCustToolbar * GetCustomizableToolbar() = 0;
// MainFrame's Toolbar Stuff
virtual void ImagesButton(BOOL) = 0;
// Window Title Stuff
virtual void SetWindowTitle(const char *) = 0;
virtual void SetDocumentTitle(const char *) = 0;
};
typedef IChrome * LPCHROME;
#define ApiChrome(v,unk) APIPTRDEF(IID_IChrome,IChrome,v,unk)
#endif

View File

@ -1,80 +0,0 @@
/* -*- 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.
*/
#ifndef _APICX_H
#define _APICX_H
#ifndef __APIAPI_H
#include "apiapi.h"
#endif
#ifndef __NSGUIDS_H
#include "nsguids.h"
#endif
// Define these for graceful type coping
typedef struct MWContext_ MWContext;
typedef struct URLStruct_ URLStruct;
typedef struct PrintSetup_ PrintSetup;
class IMWContext: public IUnknown
{
public:
// The context functions of the class, all pure virtual at this level.
// This is a special hack to autogenerate the functions as pure virtual.
// See the header mk_cx_fn.h for more insight.
// This more or less must be the first thing done in the class, to get all the
// virtual tables correct in classes to come.
#define FE_DEFINE(funkage, returns, args) virtual returns funkage args = 0;
#include "mk_cx_fn.h"
// The URL exit routine.
// This is called by CFE_GetUrlExitRoutine, which should be passed as the exit routine
// in any calls to NET_GetURL....
virtual void GetUrlExitRoutine(URL_Struct *pUrl, int iStatus, MWContext *pContext) = 0;
// The text translation exit routine.
// This is called by CFE_TextTranslationExitRoutine, which should be passed as the exit
// routine in any calls to XL_TranslateText....
virtual void TextTranslationExitRoutine(PrintSetup *pTextFE) = 0;
// XP Context accessor
virtual MWContext *GetContext() const = 0;
// This function is very important.
// It allows you to write code which can detect when a context
// is actually in the process of being destroyed.
// In many cases, you will receive callbacks from the XP libraries
// while the context is being destroyed. If you GPF, then use
// this function to better detect your course of action.
virtual BOOL IsDestroyed() const = 0;
// Function to load a URL with this context, with the custom exit routing handler.
// Use this to NET_GetURL instead or XL_TranslateText instead.
virtual int GetUrl(URL_Struct *pUrl, FO_Present_Types iFormatOut, BOOL bReallyLoad = TRUE, BOOL bForceNew = FALSE) = 0;
// Generic brain dead interface to load a URL.
// This used to be known as OnNormalLoad.
virtual int NormalGetUrl(const char *pUrl, const char *pReferrer = NULL, const char *pTarget = NULL, BOOL bForceNew = FALSE) = 0;
};
typedef IMWContext *LPMWCONTEXT;
#endif

View File

@ -1,109 +0,0 @@
/* -*- 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.
*/
#ifndef __APIIMG_H
#define __APIIMG_H
#ifndef __APIAPI_H
#include "apiapi.h"
#endif
#ifndef __NSGUIDS_H
#include "nsguids.h"
#endif
#define APICLASS_IMAGEMAP "ImageMap"
class IImageMap
{
public:
virtual int Initialize (
unsigned int rcid,
int width,
int height
) = 0;
// Please use these draw functions instead of the MFC ones below
virtual void DrawImage (
int index,
int x,
int y,
HDC hDestDC,
BOOL bButton
) = 0;
virtual void DrawTransImage (
int index,
int x,
int y,
HDC hDestDC
) = 0;
// Please don't use these functions, they are obsolete
// and provided only for compatibility
virtual void DrawImage (
int index,
int x,
int y,
CDC * hDestDC,
BOOL bButton
) = 0;
virtual void DrawTransImage (
int index,
int x,
int y,
CDC * hDestDC
) = 0;
virtual void ReInitialize (
void
) = 0;
virtual void UseNormal (
void
) = 0;
virtual void UseHighlight (
void
) = 0;
virtual int GetImageHeight (
void
) = 0;
virtual int GetImageWidth (
void
) = 0;
virtual int GetImageCount (
void
) = 0;
virtual unsigned int GetResourceID (
void
) = 0;
};
typedef IImageMap * LPIMAGEMAP;
#define ApiImageMap(v,unk) APIPTRDEF(IID_IImageMap,IImageMap,v,unk)
#endif

View File

@ -1,101 +0,0 @@
/* -*- 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.
*/
#ifndef _APIMSG_H
#define _APIMSG_H
#ifndef __APIAPI_H
#include "apiapi.h"
#endif
#ifndef __NSGUIDS_H
#include "nsguids.h"
#endif
#include "msgcom.h"
/////////////////////////////////////////////////////////////////////
// This interface applies to those MSG_Panes that are compose windows
class IMsgCompose: public IUnknown {
public:
// Initialization/Demolition
virtual void InitializeMailCompositionContext( MSG_Pane* comppane,
const char *from,
const char *reply_to,
const char *to,
const char *cc,
const char *bcc,
const char *fcc,
const char *newsgroups,
const char *followup_to,
const char *subject,
const char *attachment ) = 0;
virtual void RaiseMailCompositionWindow( MSG_Pane* comppane ) = 0;
virtual void DestroyMailCompositionContext( MWContext* context ) = 0;
// Misc Operations
virtual void UpdateToolbar ( MSG_Pane* comppane ) = 0;
virtual void MsgShowHeaders ( MSG_Pane* comppane, MSG_HEADER_SET headers ) = 0;
virtual char *PromptMessageSubject( MSG_Pane* comppane ) = 0;
// Message Operations
virtual void InsertMessageCompositionText( MSG_Pane* comppane,
const char *text,
XP_Bool leaveCursorAtBeginning) = 0;
virtual int GetMessageBody( MSG_Pane* comppane,
char **body,
uint32 *body_size,
MSG_FontCode **font_changes ) = 0;
virtual void DoneWithMessageBody(MSG_Pane* comppane, char* body,
uint32 body_size) = 0;
};
typedef IMsgCompose *LPMSGCOMPOSE;
///////////////////////////////////////////////////////////
// This interface applies to those MSG_Panes that are lists
class IMsgList: public IUnknown {
public:
// Operations
virtual void ListChangeStarting( MSG_Pane* pane, XP_Bool asynchronous,
MSG_NOTIFY_CODE notify, MSG_ViewIndex where,
int32 num) = 0;
virtual void ListChangeFinished( MSG_Pane* pane, XP_Bool asynchronous,
MSG_NOTIFY_CODE notify, MSG_ViewIndex where,
int32 num) = 0;
virtual void GetSelection( MSG_Pane* pane, MSG_ViewIndex **indices, int *count,
int *focus) = 0;
virtual void SelectItem( MSG_Pane* pane, int item ) = 0;
virtual void CopyMessagesInto( MSG_Pane *pane, MSG_ViewIndex *indices, int count,
MSG_FolderInfo *folderInfo) = 0;
virtual void MoveMessagesInto( MSG_Pane *pane, MSG_ViewIndex *indices, int count,
MSG_FolderInfo *folderInfo) = 0;
};
typedef IMsgList *LPMSGLIST;
/* Unfiled:
MSG_Pane* FE_CreateCompositionPane( MWContext *context);
char* FE_GetTempFileFor( MWContext *context, const char *fname,
XP_FileType ftype, XP_FileType *rettype);
void FE_UpdateBiff( MSG_BIFF_STATE state );
uint32 FE_DiskSpaceAvailable (MWContext *context, const char *dir);
*/
#endif

View File

@ -1,213 +0,0 @@
/* -*- 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.
*/
#ifndef __APIOUTLN_H
#define __APIOUTLN_H
#ifndef __APIAPI_H
#include "apiapi.h"
#endif
#ifndef __NSGUIDS_H
#include "nsguids.h"
#endif
#define APICLASS_OUTLINERPARENT "OutlinerParent"
#define APICLASS_OUTLINER "Outliner"
typedef enum {
ColumnFixed,
ColumnVariable
} Column_t;
typedef enum {
CropNone = 0,
CropCenter,
CropRight,
CropLeft
} CropType_t;
typedef enum {
AlignLeft,
AlignRight,
AlignCenter
} AlignType_t;
#define OUTLINER_RETURN 1
#define OUTLINER_LBUTTONDOWN 2
#define OUTLINER_LBUTTONUP 3
#define OUTLINER_RBUTTONDOWN 4
#define OUTLINER_RBUTTON 4 // For compatibility
#define OUTLINER_RBUTTONUP 5
#define OUTLINER_LBUTTONDBLCLK 6
#define OUTLINER_KEYDOWN 7
#define OUTLINER_PROPERTIES 8
#define OUTLINER_TIMER 9
#define OUTLINER_SET 10
class COutliner; // temporary hack
class IOutliner {
public:
virtual void EnableTips (
BOOL = TRUE
) = 0;
virtual BOOL GetTipsEnabled (
void
) = 0;
virtual void SetCSID (
int csid
) = 0;
virtual int GetCSID (
void
) = 0;
virtual int AddColumn (
LPCTSTR header,
UINT idCol,
int iMinCol,
int iMaxCol = 10000,
Column_t cType = ColumnFixed,
int iPercent = 50,
BOOL bIsButton = TRUE,
CropType_t ct = CropRight,
AlignType_t at = AlignLeft
) = 0;
virtual int GetColumnSize (
UINT idCol
) = 0;
virtual void SetColumnSize (
UINT idCol,
int iSize
) = 0;
virtual int GetColumnPercent (
UINT idCol
) = 0;
virtual void SetColumnPercent (
UINT idCol,
int iPercent
) = 0;
virtual int GetColumnPos(
UINT idCol
) = 0;
virtual void SetColumnPos(
UINT idCol,
int iColumn
) = 0;
virtual void SetColumnName (
UINT idCol,
LPCTSTR pName
) = 0;
virtual LPCTSTR GetColumnName (
UINT idCol
) = 0;
virtual void SetImageColumn(
UINT idCol
) = 0;
virtual void SetHasPipes(
BOOL bPipes
) = 0;
virtual void SetVisibleColumns(
UINT iVisCol
) = 0;
virtual UINT GetVisibleColumns(
void
) = 0;
virtual void SelectItem (
int iSel,
int mode = OUTLINER_SET,
UINT flags = 0
) = 0;
virtual BOOL DeleteItem (
int iLine
) = 0;
virtual void ScrollIntoView(
int iVisibleLine
) = 0;
virtual int GetFocusLine(
void
) = 0;
virtual void SetTotalLines(
int
) = 0;
virtual int GetTotalLines(
void
) = 0;
};
typedef IOutliner * LPIOUTLINER;
#define ApiOutliner(v,unk) APIPTRDEF(IID_IOutliner,IOutliner,v,unk)
class IOutlinerParent {
public:
virtual void EnableBorder (
BOOL = TRUE
) = 0;
virtual void EnableHeaders (
BOOL = TRUE
) = 0;
virtual void SetOutliner (
COutliner * pIOutliner
) = 0;
virtual COutliner * GetOutliner (
void
) = 0;
virtual void CreateColumns (
void
) = 0;
virtual BOOL ColumnCommand (
int idColumn
) = 0;
virtual BOOL RenderData (
int idColumn,
CRect & rect,
CDC & dc,
LPCTSTR lpsz = NULL
) = 0;
};
typedef IOutlinerParent * LPIOUTLINERPARENT;
#define ApiOutlinerParent(v,unk) APIPTRDEF(IID_IOutlinerParent,IOutlinerParent,v,unk)
#endif

View File

@ -1,118 +0,0 @@
/* -*- 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.
*/
// apiprint.h contains the page setup api
#ifndef __APIPAGE_H
#define __APIPAGE_H
#ifndef __APIAPI_H
#include "apiapi.h"
#endif
#ifndef __NSGUIDS_H
#include "nsguids.h"
#endif
// APIID_Printer (IPrinter interface)
// this interface is used to retrieve and set information from
// the page setup object. The functions are pretty self
// explanatory. A -1 gets the current value in the single
// argument function calls.
class IPageSetup {
public:
virtual void GetMargins (
long * plLeft,
long * plRight,
long * plTop,
long * plBottom
) = 0;
virtual void SetMargins (
long lLeft,
long lRight,
long lTop,
long lBottom
) = 0;
virtual void GetPageSize (
long * lWidth,
long * lHeight
) = 0;
virtual void SetPageSize (
long lWidth,
long lHeight
) = 0;
virtual void SetPrintingBkImage (BOOL flag) = 0;
virtual BOOL IsPrintingBkImage (void) = 0;
#define PRINT_TITLE 1
#define PRINT_URL 2
// -1 = Get state
// 0 = disable
//
// 1 (01) = title
// 2 (10) = location (URL)
// combinable with OR
virtual int Header (
int flag = -1
) = 0;
#define PRINT_PAGENO 1
#define PRINT_PAGECOUNT 2
#define PRINT_DATE 4
// -1 = Get state
// 0 = disable
//
// 1 (001) = page #
// 2 (010) = total page count
// 4 (100) = date printed
// combinable with OR
virtual int Footer (
int flag = -1
) = 0;
virtual int SolidLines (
int flag = -1
) = 0;
virtual int BlackText (
int flag = -1
) = 0;
virtual int BlackLines (
int flag = -1
) = 0;
virtual int ReverseOrder (
int flag = -1
) = 0;
};
typedef IPageSetup * LPPAGESETUP;
#define APICLASS_PAGESETUP "PageSetup"
#define ApiPageSetup(v,unk) APIPTRDEF(IID_IPageSetup,IPageSetup,v,unk)
#endif

View File

@ -1,99 +0,0 @@
/* -*- 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.
*/
#ifndef _APITAB_H
#define _APITAB_H
#ifndef __APIAPI_H
#include "apiapi.h"
#endif
#ifndef __NSGUIDS_H
#include "nsguids.h"
#endif
#define APICLASS_TABCONTROL "TabControl"
//
// Message send to parent
//
// Notify that a tab is about the change. The message handler
// can return non-zero to prevent the user from changing
// the tab.
#ifndef TCM_TABCHANGING
#define TCM_TABCHANGING (WM_USER + 200)
#endif
// Notify tab changed. The message handler can use
// GetCurSel to determine the new page.
#ifndef TCM_TABCHANGED
#define TCM_TABCHANGED (WM_USER + 201)
#endif
#undef INTERFACE
#define INTERFACE ITabControl
DECLARE_INTERFACE_(ITabControl, IUnknown)
{
// Attributes
// Returns the height of the tab control
STDMETHOD_(int, GetHeight) (THIS) const PURE;
// Returns the currently selected tag (0 based index)
STDMETHOD_(int, GetCurSel) (THIS) const PURE;
// Returns the number of tabs
STDMETHOD_(int, GetItemCount) (THIS) const PURE;
// Returns the HWND of the tab control
STDMETHOD_(HWND, GetHWnd) (THIS) const PURE;
// Returns the tab under a given point (in client coords)
STDMETHOD_(int, TabFromPoint) (const POINT *pt) PURE;
// Operations
// Creates a TabControl. Takes normal window styles.
STDMETHOD(Create) (THIS_ DWORD dwStyle, const RECT *rect, HWND hParent, UINT nID) PURE;
// Adds a tab with caption and image with index iImage (-1 for no image)
STDMETHOD(AddTab) (THIS_ LPCTSTR lpszCaption, int iImage) PURE;
// Removed tab nTab (0 based index)
STDMETHOD(RemoveTab) (THIS_ int nTab) PURE;
// Show/Hide tab nTab (0 based index)
STDMETHOD(ShowTab) (THIS_ int nTab, BOOL bShow = TRUE) PURE;
// Select tab nTab (0 based index)
STDMETHOD(SetCurSel) (THIS_ int nTab) PURE;
// Sets the bitmap for the tab images
STDMETHOD(LoadBitmap) (THIS_ UINT id) PURE;
// Set the size of each tab image
STDMETHOD(SetSizes) (THIS_ const SIZE *size) PURE;
// Change the text of a tab
STDMETHOD(SetText) (THIS_ int idx, LPCSTR lpszCaption) PURE;
};
typedef ITabControl * LPTABCONTROL;
#define ApiTabControl(v,unk) APIPTRDEF(IID_ITabControl,ITabControl,v,unk)
#endif

View File

@ -1,139 +0,0 @@
/* -*- 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.
*/
// AskMeDlg.cpp : implementation file
//
#include "stdafx.h"
#include "askmedlg.h"
#include "prefapi.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
void AskMeDlg(void)
{
int32 nPromptAskMe = FALSE;
PREF_GetIntPref("offline.startup_state", &nPromptAskMe);
if(nPromptAskMe == 0) //old setting (note, network.online gets initialized before
//user prefs read in so we have to reset this now
{
XP_Bool boolPref = FALSE;
PREF_GetBoolPref("network.online", &boolPref);
PREF_SetBoolPref("network.online", !boolPref);
PREF_SetBoolPref("network.online", boolPref);
}
else if (nPromptAskMe==1) //askme
{
CAskMeDlg rAskMeDlg(nPromptAskMe);
rAskMeDlg.DoModal();
}
}
/////////////////////////////////////////////////////////////////////////////
// CAskMeDlg dialog
CAskMeDlg::CAskMeDlg(BOOL bDefault/*FALSE*/, int nOnOffLine/*0-the default*/,
CWnd* pParent /*=NULL*/)
: CDialog(CAskMeDlg::IDD, pParent)
{
XP_Bool bOnline = TRUE;
PREF_GetBoolPref("network.online", &bOnline);
//{{AFX_DATA_INIT(CAskMeDlg)
m_nStartupSelection = (bOnline == 1 ? 0 : 1);
m_bAskMeDefault = 0;
//}}AFX_DATA_INIT
}
void CAskMeDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAskMeDlg)
DDX_Radio(pDX, IDC_RADIO_ONLINE, m_nStartupSelection);
DDX_Check(pDX, IDC_CHECK_ASKME_DEFAULT, m_bAskMeDefault);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAskMeDlg, CDialog)
//{{AFX_MSG_MAP(CAskMeDlg)
ON_BN_CLICKED(IDC_CHECK_ASKME_DEFAULT, OnCheckAskMeDefault)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAskMeDlg message handlers
void CAskMeDlg::OnOK()
{
//Save any preference settings that may have been chosen
CDialog::OnOK();
UpdateData();
if (IsDlgButtonChecked(IDC_CHECK_ASKME_DEFAULT))
{
//remember previous setting the next time we exit.
PREF_SetIntPref("offline.startup_state",0);
}
if (IsDlgButtonChecked(IDC_RADIO_ONLINE))
PREF_SetBoolPref("network.online", TRUE);
else
PREF_SetBoolPref("network.online", FALSE);
}
void CAskMeDlg::OnCheckAskMeDefault()
{
}
void CAskMeDlg::EnableDisableItem(BOOL bState, UINT nIDC)
{
CWnd *pWnd = GetDlgItem(nIDC);
if (pWnd)
{
pWnd->EnableWindow(bState);
}
}
BOOL CAskMeDlg::OnInitDialog()
{
BOOL bReturn = CDialog::OnInitDialog();
CWnd *pWnd = NULL;
HFONT hFont = (HFONT)this->SendMessage(WM_GETFONT);
if (hFont != NULL)
{ //make the title bold
VERIFY(::GetObject(hFont, sizeof(LOGFONT), &m_LogFont));
m_LogFont.lfWeight=FW_BOLD;
m_hFont = theApp.CreateAppFont( m_LogFont );
::SendMessage(::GetDlgItem(m_hWnd, IDC_STATIC_TITLE), WM_SETFONT, (WPARAM)m_hFont, FALSE);
::SendMessage(::GetDlgItem(m_hWnd, IDC_RADIO_ONLINE), WM_SETFONT, (WPARAM)m_hFont, FALSE);
::SendMessage(::GetDlgItem(m_hWnd, IDC_RADIO_OFFLINE), WM_SETFONT, (WPARAM)m_hFont, FALSE);
::SendMessage(::GetDlgItem(m_hWnd, IDC_CHECK_ASKME_DEFAULT), WM_SETFONT, (WPARAM)m_hFont, FALSE);
}
return bReturn;
}

View File

@ -1,64 +0,0 @@
/* -*- 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.
*/
// AskMeDlg.h : header file
//
/////////////////////////////////////////////////////////////////////////////
// CAskMeDlg dialog
class CAskMeDlg : public CDialog
{
// Construction
public:
CAskMeDlg(BOOL bDefault = FALSE, int nOnOffLine = 0, CWnd* pParent = NULL); // standard constructor
// Dialog Data
//{{AFX_DATA(CAskMeDlg)
enum { IDD = IDD_ASKME_DIALOG };
int m_nStartupSelection;
BOOL m_bAskMeDefault;
//}}AFX_DATA
LOGFONT m_LogFont;
HFONT m_hFont;
public:
BOOL GetDefaultMode() const {return m_bAskMeDefault;};
BOOL GetStartupSelection() const {return m_nStartupSelection;};
void SetDefaultMode(BOOL bDefaultMode) {m_bAskMeDefault = bDefaultMode;};
void SetStartupSelection(int nStartupSelection) {m_nStartupSelection = nStartupSelection;};
void EnableDisableItem(BOOL bState, UINT nIDC);
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAskMeDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(CAskMeDlg)
virtual void OnOK();
afx_msg void OnCheckAskMeDefault();
virtual BOOL OnInitDialog();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};

View File

@ -1,109 +0,0 @@
/* -*- 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.
*/
// attachdl.h : header file
//
#include "msgctype.h"
#include "mmnmsg.h"
/////////////////////////////////////////////////////////////////////////////
// CAttachDlg dialog
class CAttachDlg : public CDialog
{
// Construction
public:
CAttachDlg( MSG_Pane * pPane = NULL,
char * pUrl = NULL, CWnd* pParent = NULL); // standard constructor
// Dialog Data
//{{AFX_DATA(CAttachDlg)
enum { IDD = IDD_MULTIATTACH };
CButton m_DeleteButton;
CButton m_AsIsButton;
CButton m_ConvertButton;
CListBox m_AttachmentList;
int m_bAsIs;
//}}AFX_DATA
char * m_pUrl;
MSG_Pane * m_pPane;
MSG_Pane * GetMsgPane() { return m_pPane; }
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAttachDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
void CleanupAttachList(void);
// Generated message map functions
//{{AFX_MSG(CAttachDlg)
afx_msg void OnAttachfile();
afx_msg void OnAttachurl();
afx_msg void OnConvert();
afx_msg void OnDelete();
afx_msg void OnAsis();
virtual void OnOK();
virtual void OnCancel();
virtual BOOL OnInitDialog();
afx_msg void OnSelchangeAttachments();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
// CLocationDlg dialog
class CLocationDlg : public CDialog
{
// Construction
public:
CLocationDlg(char * pUrl = NULL, CWnd* pParent = NULL); // standard constructor
char * m_pUrl;
// Dialog Data
//{{AFX_DATA(CLocationDlg)
enum { IDD = IDD_ATTACHLOCATION };
CEdit m_LocationBox;
CString m_Location;
//}}AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CLocationDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(CLocationDlg)
virtual BOOL OnInitDialog();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};

View File

@ -1,552 +0,0 @@
/* -*- 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.
*/
/* ****************************************************************************
*
*/
#include "stdafx.h"
#include <windows.h>
#include <ole2.h>
#include "DAIntf.h"
#include "xp.h"
#include <initguid.h>
#include "DAIntf.h"
/* ****************************************************************************
*
*/
class CDALoader
{
IDAProcess *m_pIDAProcess;
public:
CDALoader(void);
~CDALoader(void);
IDAProcess *Load(void);
IDAProcess *Interface(void) { return m_pIDAProcess; }
};
/* ****************************************************************************
*
*/
CDALoader::CDALoader(void)
: m_pIDAProcess(NULL)
{
}
/* ****************************************************************************
*
*/
CDALoader::~CDALoader(void)
{
if (m_pIDAProcess)
{
m_pIDAProcess->Release();
CoUninitialize();
}
}
/* ****************************************************************************
*
*/
IDAProcess * CDALoader::Load(void)
{
static tried_once = FALSE;
if (m_pIDAProcess)
{
return m_pIDAProcess;
}
if(tried_once)
return NULL;
else
tried_once = TRUE;
if (SUCCEEDED(CoInitialize(NULL)))
{
if (SUCCEEDED(CoCreateInstance(CLSID_DA,
NULL,
CLSCTX_INPROC_SERVER,
IID_IDAProcess,
(LPVOID *)&m_pIDAProcess)))
{
return m_pIDAProcess;
}
CoUninitialize();
}
return NULL;
}
/* ****************************************************************************
*
*/
PRIVATE XP_List * address_auth_list = 0;
static CDALoader g_DA;
/* ****************************************************************************
*
*/
class CDAPacket : public IDAPacket
{
LONG m_cRef;
char * m_pPassedInHeader;
public:
CDAPacket(char *pHeader);
~CDAPacket(void);
char * m_pNewHeaders;
// IUnknown methods.
STDMETHOD_(ULONG, AddRef)(THIS);
STDMETHOD_(ULONG, Release)(THIS);
STDMETHOD(QueryInterface)(THIS_
REFIID riid,
LPVOID *ppvObject);
// IDAPacket methods.
STDMETHOD(AddNameValue)(THIS_
const TCHAR *pszName,
const TCHAR *pszValue);
STDMETHOD(FindValue)(THIS_
const TCHAR *pszName,
const TCHAR *pszSubName,
TCHAR * pszValue,
DWORD cbValue) const;
STDMETHOD(ReplaceNameValue)(THIS_
const TCHAR *pszName,
const TCHAR *pszValue);
};
/* ****************************************************************************
*
*/
struct address_auth_assoc {
char *address;
CDAPacket *auth;
};
/* ****************************************************************************
*
*/
CDAPacket::CDAPacket(char *pPassedInHeader)
: m_cRef(1),
m_pNewHeaders(NULL)
{
m_pPassedInHeader = pPassedInHeader;
}
/* ****************************************************************************
*
*/
CDAPacket::~CDAPacket(void)
{
if(m_pNewHeaders)
XP_FREE(m_pNewHeaders);
}
/* ****************************************************************************
*
*/
STDMETHODIMP_(ULONG) CDAPacket::AddRef(void)
{
#ifdef WIN32
return InterlockedIncrement(&m_cRef);
#else
return ++m_cRef;
#endif
}
/* ****************************************************************************
*
*/
STDMETHODIMP_(ULONG) CDAPacket::Release(void)
{
#ifdef WIN32
return InterlockedDecrement(&m_cRef);
#else
return --m_cRef;
#endif
}
/* ****************************************************************************
*
*/
STDMETHODIMP CDAPacket::QueryInterface
(
REFIID riid,
LPVOID * ppvObject
)
{
if (!ppvObject)
{
return ResultFromScode(E_INVALIDARG);
}
*ppvObject = NULL;
if (riid == IID_IDAPacket)
{
*ppvObject = (IDAPacket *)this;
} else if (riid == IID_IUnknown)
{
*ppvObject = (IUnknown *)this;
}
else
{
return ResultFromScode(E_NOINTERFACE);
}
AddRef();
return NOERROR;
}
/* ****************************************************************************
*
*/
STDMETHODIMP CDAPacket::AddNameValue
(
const TCHAR *pszName,
const TCHAR *pszValue
)
{
if (!pszName || !pszValue)
{
return ResultFromScode(E_FAIL);
}
if(m_pNewHeaders)
{
char * tmp = m_pNewHeaders;
m_pNewHeaders = PR_smprintf("%s%s: %s"CRLF,
tmp ? tmp : "",
pszName,
pszValue);
XP_FREE(tmp);
}
else
{
m_pNewHeaders = PR_smprintf("%s: %s"CRLF,
pszName,
pszValue);
}
return NOERROR;
}
/* ****************************************************************************
*
*/
STDMETHODIMP CDAPacket::FindValue
(
const TCHAR *pszName,
const TCHAR *pszSubName,
TCHAR * pszValue,
DWORD cbValue
) const
{
#define WWW_AUTHENTICATE "WWW-Authenticate"
if(strncasecomp(pszName, WWW_AUTHENTICATE, sizeof(WWW_AUTHENTICATE) - 1))
return ResultFromScode(E_FAIL); /* not a valid name */
if(pszSubName == NULL)
{
strncpy(pszValue, "Remote-Passphrase", CASTSIZE_T(cbValue));
pszValue[cbValue-1] = '\0';
return (NOERROR);
}
char *token;
while((token = strcasestr(m_pPassedInHeader, pszSubName)))
{
/* look for an immediate equal and then a quote
*/
char *cp = token;
char *end_of_value;
cp += XP_STRLEN(pszSubName);
while(isspace(*cp)) cp++;
if(*cp != '=')
continue;
while(isspace(*cp)) cp++;
if(*++cp != '"')
continue;
end_of_value = strchr(++cp, '"');
if(!end_of_value)
return ResultFromScode(E_FAIL);
*end_of_value = '\0';
if(end_of_value - cp > (ptrdiff_t)cbValue)
{
*end_of_value = '"';
return ResultFromScode(E_FAIL);
}
XP_STRCPY(pszValue, cp);
*end_of_value = '"';
return (NOERROR);
}
return ResultFromScode(E_FAIL);
}
/* ****************************************************************************
*
*/
STDMETHODIMP CDAPacket::ReplaceNameValue
(
const TCHAR *pszName,
const TCHAR *pszValue
)
{
return ResultFromScode(E_NOTIMPL);
}
/* ****************************************************************************
*
*/
PRIVATE char *GetMethod(URL_Struct *URL_s)
{
if(URL_s->method == URL_POST_METHOD)
return XP_STRDUP("POST");
else if(URL_s->method == URL_HEAD_METHOD)
return XP_STRDUP("HEAD");
else
return XP_STRDUP("GET");
}
/* ****************************************************************************
*
*/
extern "C" int
WFE_DoCompuserveAuthenticate(MWContext *context,
URL_Struct *URL_s,
char *authenticate_header_value)
{
struct address_auth_assoc * assoc_obj = 0;
struct address_auth_assoc * cur_assoc_ptr;
CDAPacket *auth;
XP_List *list_ptr;
char *host;
HRESULT status;
// Load the DA OLE server if it hasn't already been loaded.
IDAProcess *pIDAProcess = g_DA.Interface();
if (!pIDAProcess)
{
return NET_AUTH_FAILED_DISPLAY_DOCUMENT;
}
if(!address_auth_list)
{
address_auth_list = XP_ListNew();
if(!address_auth_list)
return NET_AUTH_FAILED_DISPLAY_DOCUMENT;
}
/* search for an existing association */
list_ptr = address_auth_list;
while((cur_assoc_ptr = (address_auth_assoc *)XP_ListNextObject(list_ptr)))
{
if(!XP_STRCMP(cur_assoc_ptr->address, URL_s->address))
{
assoc_obj = cur_assoc_ptr;
break;
}
}
if(assoc_obj)
{
XP_ListRemoveObject(address_auth_list, assoc_obj);
delete assoc_obj->auth;
XP_FREE(assoc_obj->address);
XP_FREE(assoc_obj);
}
if(URL_s->server_status != 200
&& URL_s->server_status != 401)
return(FALSE);
auth = new CDAPacket(authenticate_header_value);
auth->m_pNewHeaders = XP_STRDUP("Extension: Security/Remote-Passphrase"CRLF);
host = NET_ParseURL(URL_s->address, GET_HOST_PART);
if(URL_s->server_status == 401)
{
struct SDAAuthData auth_data_struct;
char username[256] = "";
char password[256] = "";
char realm[256] = "";
char * path = NET_ParseURL(URL_s->address, GET_PATH_PART | GET_SEARCH_PART);
auth_data_struct.pIDAPacketIn = auth;
auth_data_struct.pszHost = host;
auth_data_struct.pszURI = path;
auth_data_struct.pszMethod = GetMethod(URL_s);
auth_data_struct.pIDAPacketOut = auth;
auth_data_struct.bShowDialog = 1;
auth_data_struct.hParent = NULL;
auth_data_struct.pszUsername = username;
auth_data_struct.wMaxUsername = sizeof(username) - 1;
auth_data_struct.pszRealmname = realm;
auth_data_struct.pszPassword = password;
auth_data_struct.wMaxPassword = sizeof(password) - 1;
auth_data_struct.pIDAPassword = NULL;
status = pIDAProcess->On401Authenticate(&auth_data_struct);
if(status == NOERROR)
{
assoc_obj = XP_NEW(struct address_auth_assoc);
if(!assoc_obj)
return NET_AUTH_FAILED_DISPLAY_DOCUMENT;
assoc_obj->auth = auth;
assoc_obj->address = XP_STRDUP(URL_s->address);
XP_ListAddObject(address_auth_list, assoc_obj);
XP_FREE(host);
return(NET_RETRY_WITH_AUTH);
}
}
else
{
status = pIDAProcess->On200Authenticate(host, auth);
}
XP_FREE(host);
delete(auth);
if(status != NOERROR)
return(NET_AUTH_FAILED_DONT_DISPLAY);
else
return(NET_AUTH_SUCCEEDED);
}
/* ****************************************************************************
*
*/
extern "C" char *
WFE_BuildCompuserveAuthString(URL_Struct *URL_s)
{
XP_List * list_ptr;
struct address_auth_assoc *cur_assoc_ptr;
struct address_auth_assoc *assoc_obj = NULL;
static char *rv=NULL; /* malloc and free on successive calls */
IDAProcess *pIDAProcess = g_DA.Load();
if(pIDAProcess)
{
/* search for an existing association */
list_ptr = address_auth_list;
while((cur_assoc_ptr = (address_auth_assoc *)XP_ListNextObject(list_ptr)))
{
if(!XP_STRCMP(cur_assoc_ptr->address, URL_s->address))
assoc_obj = cur_assoc_ptr;
}
if(assoc_obj)
{
/* since we found it in the assoc list then
* we have gotten a 401 and are about to
* send another request. Send the
* header.
*/
return(assoc_obj->auth->m_pNewHeaders);
}
/* if we didn't find it in the assoc list then
* call the cheat routine to see if we need
* to send any headers
*/
if(rv)
{
XP_FREE(rv);
rv = NULL;
}
HRESULT status = ResultFromScode(E_FAIL);
char * host = NET_ParseURL(URL_s->address, GET_HOST_PART);
char * path = NET_ParseURL(URL_s->address, GET_PATH_PART | GET_SEARCH_PART);
char * method = GetMethod(URL_s);
if(host && path && method)
{
CDAPacket daPacket("");
status = pIDAProcess->Cheat(host, path, method, &daPacket);
rv = XP_STRDUP(daPacket.m_pNewHeaders);
}
if(host)
XP_FREE(host);
if(path)
XP_FREE(path);
if(method)
XP_FREE(method);
}
return(rv);
}

View File

@ -1,684 +0,0 @@
/* -*- 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.
*/
// button.cpp : implementation file
//
#include "stdafx.h"
#include "fmabstra.h"
#include "button.h"
#include "libevent.h"
#include <windowsx.h>
#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif
#ifndef _AFXDLL
#define new DEBUG_NEW // MSVC Debugging new...goes to regular new in release mode
#endif
#ifndef _WIN32
#define GET_WM_COMMAND_CMD(wp, lp) ((UINT)HIWORD(lp))
#endif
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// CNetscapeButton dialog
IMPLEMENT_DYNAMIC(CNetscapeButton, CButton)
CNetscapeButton::CNetscapeButton(MWContext * context, LO_FormElementStruct * form, CWnd* pParent)
{
m_Context = context;
m_Form = form;
m_bDepressed = FALSE;
m_pwndEdit = NULL;
m_pPaneCX = PANECX(m_Context);
m_callBase = FALSE;
}
BEGIN_MESSAGE_MAP(CNetscapeButton, CButton)
ON_WM_CHAR()
ON_WM_SETFOCUS()
ON_WM_KILLFOCUS()
ON_WM_LBUTTONDBLCLK()
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_WM_RBUTTONDBLCLK()
ON_WM_RBUTTONDOWN()
ON_WM_RBUTTONUP()
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CNetscapeButton message handlers
/////////////////////////////////////////////////////////////////////////////
//
// Called when the 'submit' event has been processed
//
static void
button_submit_closure(MWContext * pContext, LO_Element * pEle, int32 event,
void * pObj, ETEventStatus status)
{
if(status != EVENT_OK || !pEle || !pContext)
return;
FE_SubmitInputElement(pContext, pEle);
}
//
// Called when the 'click' event has been processed
//
static void
button_click_closure(MWContext * pContext, LO_Element * pEle, int32 event,
void * pObj, ETEventStatus status)
{
// make sure every thing is OK
if(status == EVENT_PANIC || !pEle || !pContext)
return;
CNetscapeButton * pButton = (CNetscapeButton *) pObj;
LO_FormElementStruct * pForm = (LO_FormElementStruct *) pEle;
lo_FormElementMinimalData * min_data;
lo_FormElementToggleData * tog_data;
min_data = (lo_FormElementMinimalData *) pForm->element_data;
if(!min_data)
return;
if(status == EVENT_OK) {
switch(min_data->type) {
case FORM_TYPE_SUBMIT:
// send the event to libmocha --- do any further processing
// in our closure routine
JSEvent *event;
event = XP_NEW_ZAP(JSEvent);
event->type = EVENT_SUBMIT;
event->layer_id = pForm->layer_id;
ET_SendEvent(pContext, pEle, event,
button_submit_closure, pObj);
break;
case FORM_TYPE_RESET:
// libmocha has said it was OK to allow the reset to happen
// tell layout to go forward with the operation
// the world may not be safe after this so return
LO_ResetForm(pContext, pForm);
return;
default:
break;
}
}
else {
// Undo state operations.
switch(min_data->type) {
case FORM_TYPE_RADIO:
if(pButton->m_pLastSelectedRadio) {
tog_data = (lo_FormElementToggleData *)
pButton->m_pLastSelectedRadio->element_data;
if(!tog_data->toggled)
LO_FormRadioSet(ABSTRACTCX(pContext)->GetDocumentContext(),
pButton->m_pLastSelectedRadio);
CFormElement *pRadioButton = CFormElement::GetFormElement(ABSTRACTCX(pContext),
pButton->m_pLastSelectedRadio);
if(pRadioButton) {
pRadioButton->SetFormElementToggle(tog_data->toggled);
}
}
break;
case FORM_TYPE_CHECKBOX:
tog_data = (lo_FormElementToggleData *) pForm->element_data;
if(tog_data->toggled)
tog_data->toggled = FALSE;
else
tog_data->toggled = TRUE;
if((pButton->GetCheck() ? TRUE : FALSE) != tog_data->toggled)
pButton->SetCheck(tog_data->toggled);
break;
default:
break;
}
}
}
// NFlags as per OnLButtonUp
//
//
// for FORM_TYPE_CHECKBOX, there are 3 places in this file call Click().
// 1. OnChar for space-key
// 2. OnButtonEvent, initiated by java script?
// 3. OnChildNotify maybe not necesary to handle this msg.
//
// We taggled state for 1 and 2.We do NOT taggle for 3. It always comes
// with 1 or 2. It is not clear whether item 3 is redundent, so it is
// not removed.
//
// Click() function is still called for all 3 cases.
//
// Messages interfare with debug, Trace statements are left for debuging.
//
// When change this code, please make sure radio-button and check-box
// work for both Tab-Space keys and mouse click(with out debug).
//
// Arthur 3/12/97, fix for #49682
//
void CNetscapeButton::Click(UINT nFlags, BOOL bNotify, BOOL &bReturnImmediately)
{
if(!m_Form || !m_Context)
return;
lo_FormElementMinimalData * min_data;
lo_FormElementToggleData * tog_data;
min_data = (lo_FormElementMinimalData *) m_Form->element_data;
char * pFileName;
if(!min_data)
return;
m_pLastSelectedRadio = NULL;
switch(min_data->type) {
case FORM_TYPE_RADIO:
tog_data = (lo_FormElementToggleData *) m_Form->element_data;
if(!tog_data->toggled) {
#ifdef MOZ_NGLAYOUT
XP_ASSERT(0);
#else
m_pLastSelectedRadio = LO_FormRadioSet(ABSTRACTCX(m_Context)->GetDocumentContext(), m_Form); // Turn off everyone else
#endif
}
if(GetCheck() != tog_data->toggled) {
SetCheck(tog_data->toggled);
#ifdef DEBUG_aliu
TRACE0("Set\n");
#endif // DEBUG_aliu
}
break;
case FORM_TYPE_CHECKBOX:
// Make sure we don't already reflect that state, and don't do this
// if via OnChar, as MFC/Windows will do it for us.
if(bNotify == FALSE) {
tog_data = (lo_FormElementToggleData *) m_Form->element_data;
if(tog_data->toggled) {
#ifdef DEBUG_aliu
TRACE0("Off ");
#endif // DEBUG_aliu
tog_data->toggled = FALSE;
} else {
tog_data->toggled = TRUE;
#ifdef DEBUG_aliu
TRACE0("On ");
#endif // DEBUG_aliu
}
if((GetCheck() ? TRUE : FALSE) != tog_data->toggled) {
#ifdef DEBUG_aliu
TRACE0("Set\n");
#endif // DEBUG_aliu
SetCheck(tog_data->toggled);
}
}
break;
case FORM_TYPE_BUTTON:
break;
case FORM_TYPE_RESET:
case FORM_TYPE_SUBMIT:
// don't do anything yet --- send the OnClick to libmocha first
// Sigh don't make double submits
if (bNotify == TRUE) return;
break;
case FORM_TYPE_FILE:
pFileName = wfe_GetExistingFileName(m_hWnd,
szLoadString(IDS_FILE_UPLOAD),
HTM,
TRUE);
/* update both the widget display and the lo-datastructure */
if(pFileName && m_pwndEdit) {
m_pwndEdit->SetWindowText(pFileName);
if (m_Form->element_data->ele_text.current_text)
XP_FREE(m_Form->element_data->ele_text.current_text);
m_Form->element_data->ele_text.current_text = (PA_Block) pFileName;
}
break;
default:
break;
}
// send the event to libmocha --- do any further processing
// in our closure routine
JSEvent *event;
event = XP_NEW_ZAP(JSEvent);
event->type = EVENT_CLICK;
event->layer_id = m_Form->layer_id;
event->which = 1;
event->modifiers = (nFlags & MK_SHIFT ? EVENT_SHIFT_MASK : 0)
| (nFlags & MK_CONTROL ? EVENT_CONTROL_MASK : 0)
| (GetKeyState(VK_MENU) < 0 ? EVENT_ALT_MASK : 0);
ET_SendEvent(m_Context, (LO_Element *)m_Form, event,
button_click_closure, this);
}
void CNetscapeButton::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// CButton::OnChar( nChar, nRepCnt, nFlags);
if(( nChar == VK_SPACE || nChar == VK_RETURN) && !(nFlags>>14 & 1)) {
// buttons need a push.
BOOL bReturnImmediately = FALSE;
#ifdef DEBUG_aliu
TRACE0("onCharClick ");
#endif // DEBUG_aliu
Click(0, FALSE, bReturnImmediately); //#49682 TRUE
if(bReturnImmediately) {
return;
}
}
}
void CNetscapeButton::OnSetFocus(CWnd * pWnd)
{
CButton::OnSetFocus(pWnd); //must have this for fixing #51086, ref. #49682
if(m_Context && m_Form) {
// set tab focus to this element
CWinCX *pWinCX = WINCX(m_Context);
// if ((LO_Element *)m_Form == pWinCX->getLastTabFocusElement())
// return;
pWinCX->setFormElementTabFocus( (LO_Element *)m_Form );
// send the event to libmocha --- do any further processing
// in our closure routine
JSEvent *event;
event = XP_NEW_ZAP(JSEvent);
event->type = EVENT_FOCUS;
event->layer_id = m_Form->layer_id;
ET_SendEvent(m_Context, (LO_Element *)m_Form, event,
NULL, this);
}
}
void CNetscapeButton::OnKillFocus(CWnd * pWnd)
{
CButton::OnKillFocus(pWnd);
if(m_Context && m_Form) {
// send the event to libmocha --- do any further processing
// in our closure routine
JSEvent *event;
event = XP_NEW_ZAP(JSEvent);
event->type = EVENT_BLUR;
event->layer_id = m_Form->layer_id;
ET_SendEvent(m_Context, (LO_Element *)m_Form, event, NULL, this);
}
}
void CNetscapeButton::OnLButtonDblClk(UINT uFlags, CPoint cpPoint) {
if (m_callBase) {
CButton::OnLButtonDblClk(uFlags, cpPoint);
return;
}
// Don't continue if this context is destroyed.
if(!m_Context || ABSTRACTCX(m_Context)->IsDestroyed()) {
return;
}
MapWindowPoints(GetParent(), &cpPoint, 1);
// Convert the point to something we understand.
XY Point;
m_pPaneCX->ResolvePoint(Point, cpPoint);
if (m_Context->compositor) {
CL_Event event;
fe_EventStruct fe_event;
fe_event.uFlags = uFlags;
fe_event.x = cpPoint.x;
fe_event.y = cpPoint.y;
event.type = CL_EVENT_MOUSE_BUTTON_MULTI_CLICK;
event.fe_event = (void *)&fe_event;
event.fe_event_size = sizeof(fe_EventStruct);
event.x = Point.x;
event.y = Point.y;
event.which = 1;
event.data = 2;
event.modifiers = (uFlags & MK_SHIFT ? EVENT_SHIFT_MASK : 0)
| (uFlags & MK_CONTROL ? EVENT_CONTROL_MASK : 0)
| (GetKeyState(VK_MENU) < 0 ? EVENT_ALT_MASK : 0);
CL_DispatchEvent(m_Context->compositor,
&event);
}
else
CButton::OnLButtonDblClk(uFlags, cpPoint);
return;
}
void CNetscapeButton::OnLButtonDown(UINT uFlags, CPoint cpPoint) {
if (m_callBase) {
CButton::OnLButtonDown(uFlags, cpPoint);
return;
}
// Don't continue if this context is destroyed.
if(!m_Context) {
return;
}
// Start capturing all mouse events.
if(m_hWnd) {
::SetCapture(m_hWnd);
}
MapWindowPoints(GetParent(), &cpPoint, 1);
XY Point;
m_pPaneCX->ResolvePoint(Point, cpPoint);
if (m_Context->compositor) {
CL_Event event;
fe_EventStruct fe_event;
fe_event.uFlags = uFlags;
fe_event.x = cpPoint.x;
fe_event.y = cpPoint.y;
event.type = CL_EVENT_MOUSE_BUTTON_DOWN;
event.fe_event = (void *)&fe_event;
event.fe_event_size = sizeof(fe_EventStruct);
event.x = Point.x;
event.y = Point.y;
event.which = 1;
event.modifiers = (uFlags & MK_SHIFT ? EVENT_SHIFT_MASK : 0)
| (uFlags & MK_CONTROL ? EVENT_CONTROL_MASK : 0)
| (GetKeyState(VK_MENU) < 0 ? EVENT_ALT_MASK : 0);
CL_DispatchEvent(m_Context->compositor,
&event);
}
else
CButton::OnLButtonDown(uFlags, cpPoint);
return;
}
void CNetscapeButton::OnLButtonUp(UINT uFlags, CPoint cpPoint) {
if (m_callBase) {
CButton::OnLButtonUp(uFlags, cpPoint);
return;
}
// Don't continue if this context is destroyed.
if(!m_Context) {
return;
}
// Start capturing all mouse events.
if(m_hWnd) {
::ReleaseCapture();
}
// translate mouse position to screen
CPoint cpScreenPoint(cpPoint);
ClientToScreen(&cpScreenPoint);
// Don't send the event on to JS if we're out of the button area.
if (::WindowFromPoint(cpScreenPoint) != m_hWnd) {
CButton::OnLButtonUp(uFlags, cpPoint);
m_bDepressed = FALSE;
return;
}
MapWindowPoints(GetParent(), &cpPoint, 1);
XY Point;
m_pPaneCX->ResolvePoint(Point, cpPoint);
if (m_Context->compositor) {
CL_Event event;
fe_EventStruct fe_event;
fe_event.uFlags = uFlags;
fe_event.x = cpPoint.x;
fe_event.y = cpPoint.y;
event.type = CL_EVENT_MOUSE_BUTTON_UP;
event.fe_event = (void *)&fe_event;
event.fe_event_size = sizeof(fe_EventStruct);
event.x = Point.x;
event.y = Point.y;
event.which = 1;
event.modifiers = (uFlags & MK_SHIFT ? EVENT_SHIFT_MASK : 0)
| (uFlags & MK_CONTROL ? EVENT_CONTROL_MASK : 0)
| (GetKeyState(VK_MENU) < 0 ? EVENT_ALT_MASK : 0);
CL_DispatchEvent(m_Context->compositor,
&event);
}
else
CButton::OnLButtonUp(uFlags, cpPoint);
return;
}
void CNetscapeButton::OnRButtonDblClk(UINT uFlags, CPoint cpPoint) {
if (m_callBase) {
CButton::OnRButtonDblClk(uFlags, cpPoint);
return;
}
// Don't continue if this context is destroyed.
if(!m_Context) {
return;
}
MapWindowPoints(GetParent(), &cpPoint, 1);
XY Point;
m_pPaneCX->ResolvePoint(Point, cpPoint);
if (m_Context->compositor) {
CL_Event event;
fe_EventStruct fe_event;
fe_event.uFlags = uFlags;
fe_event.x = cpPoint.x;
fe_event.y = cpPoint.y;
event.type = CL_EVENT_MOUSE_BUTTON_MULTI_CLICK;
event.fe_event = (void *)&fe_event;
event.fe_event_size = sizeof(fe_EventStruct);
event.x = Point.x;
event.y = Point.y;
event.which = 3;
event.data = 2;
event.modifiers = (uFlags & MK_SHIFT ? EVENT_SHIFT_MASK : 0)
| (uFlags & MK_CONTROL ? EVENT_CONTROL_MASK : 0)
| (GetKeyState(VK_MENU) < 0 ? EVENT_ALT_MASK : 0);
CL_DispatchEvent(m_Context->compositor,
&event);
}
else
CButton::OnRButtonDblClk(uFlags, cpPoint);
return;
}
void CNetscapeButton::OnRButtonDown(UINT uFlags, CPoint cpPoint) {
if (m_callBase) {
CButton::OnRButtonDown(uFlags, cpPoint);
return;
}
// Don't continue if this context is destroyed.
if(!m_Context) {
return;
}
// Start capturing all mouse events.
if(m_hWnd) {
::SetCapture(m_hWnd);
}
MapWindowPoints(GetParent(), &cpPoint, 1);
XY Point;
m_pPaneCX->ResolvePoint(Point, cpPoint);
if (m_Context->compositor) {
CL_Event event;
fe_EventStruct fe_event;
fe_event.uFlags = uFlags;
fe_event.x = cpPoint.x;
fe_event.y = cpPoint.y;
event.type = CL_EVENT_MOUSE_BUTTON_DOWN;
event.fe_event = (void *)&fe_event;
event.fe_event_size = sizeof(fe_EventStruct);
event.x = Point.x;
event.y = Point.y;
event.which = 3;
event.modifiers = (uFlags & MK_SHIFT ? EVENT_SHIFT_MASK : 0)
| (uFlags & MK_CONTROL ? EVENT_CONTROL_MASK : 0)
| (GetKeyState(VK_MENU) < 0 ? EVENT_ALT_MASK : 0);
CL_DispatchEvent(m_Context->compositor,
&event);
}
else
CButton::OnRButtonDown(uFlags, cpPoint);
return;
}
void CNetscapeButton::OnRButtonUp(UINT uFlags, CPoint cpPoint) {
if (m_callBase) {
CButton::OnRButtonUp(uFlags, cpPoint);
return;
}
// Don't continue if this context is destroyed.
if(!m_Context) {
return;
}
// Start capturing all mouse events.
if(m_hWnd) {
::ReleaseCapture();
}
MapWindowPoints(GetParent(), &cpPoint, 1);
XY Point;
m_pPaneCX->ResolvePoint(Point, cpPoint);
if (m_Context->compositor) {
CL_Event event;
fe_EventStruct fe_event;
fe_event.uFlags = uFlags;
fe_event.x = cpPoint.x;
fe_event.y = cpPoint.y;
event.type = CL_EVENT_MOUSE_BUTTON_UP;
event.fe_event = (void *)&fe_event;
event.fe_event_size = sizeof(fe_EventStruct);
event.x = Point.x;
event.y = Point.y;
event.which = 3;
event.modifiers = (uFlags & MK_SHIFT ? EVENT_SHIFT_MASK : 0)
| (uFlags & MK_CONTROL ? EVENT_CONTROL_MASK : 0)
| (GetKeyState(VK_MENU) < 0 ? EVENT_ALT_MASK : 0);
CL_DispatchEvent(m_Context->compositor,
&event);
}
else
CButton::OnRButtonUp(uFlags, cpPoint);
return;
}
void
CNetscapeButton::OnButtonEvent(CL_EventType type, UINT nFlags, CPoint point) {
BOOL bReturnImmediately;
m_callBase = TRUE;
switch (type) {
case CL_EVENT_MOUSE_BUTTON_DOWN:
SendMessage(WM_LBUTTONDOWN, nFlags, MAKELONG(point.x, point.y));
// Hack since Windows stubbornly refuses to accept current state.
SetState(FALSE);
SetState(TRUE);
m_bDepressed = TRUE;
break;
case CL_EVENT_MOUSE_BUTTON_UP:
// Only send click event if button is already down.
if (m_bDepressed) {
SendMessage(WM_LBUTTONUP, nFlags, MAKELONG(point.x, point.y));
#ifdef DEBUG_aliu
TRACE0("ButtonEventClick ");
#endif // DEBUG_aliu
Click(nFlags, FALSE, bReturnImmediately);
m_bDepressed = FALSE;
}
break;
case CL_EVENT_MOUSE_BUTTON_MULTI_CLICK:
SendMessage(WM_LBUTTONDBLCLK, nFlags, MAKELONG(point.x, point.y));
break;
}
m_callBase = FALSE;
}

View File

@ -1,76 +0,0 @@
/* -*- 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.
*/
// button.h : header file
//
#ifndef _BUTTON_H_
#define _BUTTON_H_
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// CNetscapeButton Class
class CNetscapeButton: public CButton
{
DECLARE_DYNAMIC(CNetscapeButton)
protected:
MWContext * m_Context;
LO_FormElementStruct * m_Form;
XP_Bool m_bDepressed;
CEdit * m_pwndEdit;
XP_Bool m_callBase;
CPaneCX * m_pPaneCX;
// Construction
public:
CNetscapeButton(MWContext * context, LO_FormElementStruct * form, CWnd* pParent = NULL); // standard constructor
inline void RegisterForm(LO_FormElementStruct * form) { m_Form = form; }
inline void RegisterEdit(CEdit * pEdit) { m_pwndEdit = pEdit; }
inline void RegisterContext(MWContext * context) { m_Context = context; }
// Attributes
LO_FormElementStruct* GetElement() const {return m_Form;}
// needs to be seen by closure
LO_FormElementStruct *m_pLastSelectedRadio;
// Implementation
protected:
CWnd * m_Parent;
// Generated message map functions
afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
afx_msg void OnSetFocus(CWnd * pOldWnd);
afx_msg void OnKillFocus(CWnd * pNewWnd);
afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg void OnRButtonDblClk(UINT nFlags, CPoint point);
afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
DECLARE_MESSAGE_MAP()
public:
void Click(UINT nFlags, BOOL bOnChar /*= FALSE*/, BOOL &bReturnImmediately);
void OnButtonEvent(CL_EventType type, UINT nFlags, CPoint point);
};
#endif /* _BUTTON_H_ */

View File

@ -1,138 +0,0 @@
/* -*- 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.
*/
#ifndef __CAST_H
#define __CAST_H
// To handle casts between the various windows
// platforms.
// We use these macros/inline functions instead of just
// casting directly so that we can manipulate their
// behaviour on a broad scale, and very customized
// behaviour can be achieved if you need to range
// check values in debug mode, etc.
// PAY ATTENTION, OR WE'RE ALL DEAD:
// The use of inline functions is to avoid the over evaluation
// problem (common to macros) when repeating parameters
// in doing a computation.
// i.e.
// #define EVAL(a) ((a) + (a))
//
// EVAL(a *= a + a);
// However, by using inline function, it is not possible
// to provide every possible cast operation that macros
// do cover. This is a known shortfall. Templates were
// the solution, but it's not clear that we'll ever have
// a 16 bit compiler which supports templates. You will
// have to implement each needed cast seperately. You
// can mostly avoid the problem by using the largest possible
// data type.
// To turn off all casting in the front end which
// utilizes these macros, define NO_CAST, and get
// ready for a boatload of warnings.
//#define NO_CAST
// Now onto the show.
// GAB 09-13-95
// Native integer cast, good for use in WinAPI calls.
// In debug, we camp on you if we actually lose bits, as it
// is ambiguous if we should hold the top limit to MAXINT
// or if we should just take the lower sizeof(int) bytes
// and ignore the rest.
#ifndef NO_CAST
#ifndef _DEBUG
#define CASTINT(a) ((int)(a))
#else
inline int CASTINT(long a) {
int b = (int)a;
ASSERT(a == (long)b);
return(b);
}
#endif
#else
#define CASTINT(a) (a)
#endif
// Native unsigned cast.
// In debug, we camp on you if we actually lose bits.
#ifndef NO_CAST
#ifndef _DEBUG
#define CASTUINT(a) ((unsigned)(a))
#else
inline unsigned CASTUINT(long a) {
unsigned b = (unsigned)a;
ASSERT(a == (long)b);
return(b);
}
#endif
#else
#define CASTUINT(a) (a)
#endif
#ifndef NO_CAST
#ifndef _DEBUG
#define CASTSIZE_T(a) ((size_t)(a))
#else
inline size_t CASTSIZE_T(long a) {
size_t b = (size_t)a;
ASSERT(a == (long)b);
return(b);
}
#endif
#else
#define CASTSIZE_T(a) (a)
#endif
#ifndef NO_CAST
#ifndef _DEBUG
#define CASTDWORD(a) ((DWORD)(a))
#else
inline DWORD CASTDWORD(long a) {
DWORD b = (DWORD)a;
ASSERT(a == (long)b);
return(b);
}
#endif
#else
#define CASTDWORD(a) (a)
#endif
// NCAPI data from URL_Struct
#define NCAPIDATA(pUrl) ((CNcapiUrlData *)(pUrl)->ncapi_data)
// Context casts
#define CX2VOID(pContext, CastFromClassCX) ((void *)((CAbstractCX *)((CastFromClassCX *)(pContext))))
#define VOID2CX(pVoid, CastToClassCX) ((CastToClassCX *)((CAbstractCX *)((void *)(pVoid))))
#define ABSTRACTCX(pXPCX) ((pXPCX)->fe.cx)
#define BOOKMARKCX(pXPCX) ((CNewBookmarkWnd *)((pXPCX)->fe.cx))
#define WINCX(pXPCX) ((CWinCX *)((pXPCX)->fe.cx))
#define CXDC(pXPCX) ((CDCCX *)((pXPCX)->fe.cx))
#define PANECX(pXPCX) ((CPaneCX *)((pXPCX)->fe.cx))
#endif // __CAST_H

File diff suppressed because it is too large Load Diff

View File

@ -1,267 +0,0 @@
/* -*- 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.
*/
//Designed specifically for pulling out command line arugments
//used in the command line startup routine. This class knows
//about two kinds of delimeters, spaces and quotes. Quotes
//when placed in front and in back of characters delimit spaces and
//any combination of any other characters. Spaces delimit quoted
//strings and other non quoted strings. Error checking is flaged
//on quoted string groups and non quoted string which are
//not separated by a space. There is no failure continue mode.
//When an error is flaged, the routine exits and signals false.
//Command line parsing implementation file.
#include "stdafx.h"
#include "cmdparse.h"
#include <ctype.h>
/************************************************************************/
//Purpose: Contructor takes two arguments to initialize the class.
//Args: pszStringToParse: a pointer to the command line to parse
// lStringList: A reference to the list to hold the arguments
/************************************************************************/
CCmdParse::CCmdParse(char *pszStringToParse,CStringList &lStringList)
{
strcpy(m_szParseString,pszStringToParse);
m_pStringList = &lStringList;
m_nIndex = 0;
}
CCmdParse::CCmdParse()
{
m_pStringList = NULL;
m_nIndex = 0;
}
/************************************************************************/
//Purpose: Destructor removes any objects still on the list
/************************************************************************/
CCmdParse::~CCmdParse()
{
if(m_pStringList)
{
POSITION pos1,pos2;
char *pTemp = NULL;
if (m_pStringList->GetCount() > 0)
{
for( pos1 = m_pStringList->GetHeadPosition(); ( pos2 = pos1 ) != NULL; )
{
m_pStringList->GetNext( pos1 );
// Save the old pointer for
//deletion.
m_pStringList->RemoveAt( pos2 );
}
}
}
}
/************************************************************************/
//Purpose: Initialize class members and construction has taken place
/************************************************************************/
void CCmdParse::Init(char *pszStringToParse,CStringList &lStringList)
{
strcpy(m_szParseString,pszStringToParse);
m_pStringList = &lStringList;
m_nIndex = 0;
}
/************************************************************************/
//Purpose: Places the accumulated character in m_Token on the list in
// the order they were seen, and resets m_Token.
/************************************************************************/
void CCmdParse::AddNewToken()
{
CString strNew = m_Token;
m_pStringList->AddTail(strNew);
memset(m_Token,'\0',sizeof(m_Token));
m_nIndex = 0;
}
/************************************************************************/
//Purpose: State machine and token builder. This optionally could have
// been broken down into separate modules for each state; however
// due to the limited number of states and delimeters it seemed
// resonable to bundle it in this function. Additional
// functionality would require breaking this up into constituent
// subroutines.
//Called by: ProcessCmdLine();
/************************************************************************/
void CCmdParse::AddChar()
{
if (*m_pCurrent == '\0')
{ //check to see if we were in the middle of building something,
//otherwise quit.
if (strlen(m_Token) > 0)
AddNewToken();
State = e_end;
return;
}
if (State == e_start && (*m_pCurrent == '"'))
{ //we are handling a quoted string
State = e_quote;
Previous = e_start;
++m_pCurrent;
return;
}
if (State == e_start && ((*m_pCurrent != '"') && (!isspace(*m_pCurrent))) )
{ //we are handling a non quoted string
State = e_other;
Previous = e_start;
return;
}
if (State == e_start && (isspace(*m_pCurrent)))
{
State = e_space;
Previous = e_start;
return;
}
if (State == e_quote && (*m_pCurrent != '"'))
{ //add it to the token builder
m_Token[m_nIndex++] = *m_pCurrent++;
return;
}
if (State == e_quote && (*m_pCurrent == '"'))
{ //we found another quote.
if (*(m_pCurrent -1) == '"')
{ //look back and see if quotes are wrong
//path names must be separated by quotes!!!!
State = e_error;
return;
}
if( !isspace(*(m_pCurrent +1)) && (*(m_pCurrent +1) != '\0') )
{
//look ahead and make sure they delimeted the quoted argument
State = e_error;
return;
}
Previous = State;//not used
//set the state so we know what we last saw and can expect
State = e_end_quote;
//add the quoted string minus the quotes
AddNewToken();
return;
}
if (State == e_end_quote && (*m_pCurrent != '"'))
{ //we are expecting a space or a non quote
if(isspace(*m_pCurrent))
{
++m_pCurrent;
State = e_space;
Previous = e_end_quote;
}
else
{
State = e_other;
Previous = e_end_quote;
}
return;
}
if (State == e_end_quote && (*m_pCurrent == '"'))
{ //suscpicious
++m_pCurrent;
return;
}
if (State == e_other && ((!isspace(*m_pCurrent)) && (*m_pCurrent != '"')) )
{ //add it to the token builder
m_Token[m_nIndex++] = *m_pCurrent++;
return;
}
else if(State == e_other && (isspace(*m_pCurrent)) )
{ //add the non quoted token
AddNewToken();
Previous = e_other;
if ( isspace(*m_pCurrent) )
State = e_space;
else
State = e_start;
return;
}
else if(State == e_other && (*m_pCurrent == '"'))
{
State = e_error;
return;
}
if (State == e_space && (!isspace(*m_pCurrent) ) )
{
State = e_start;
Previous = e_space;
return;
}
if (State == e_space && (isspace(*m_pCurrent)) )
{ //eat up spaces.
while (isspace(*m_pCurrent))
++m_pCurrent;
return;
}
}
/*************************************************************************/
//Purpose: Called to start command line processing.
// This function is used in a very minimal sense. However, it
// is prepared to grow such that more detailed errors and
// potentially more states may be added to compensate for
// additional delimiters. Currently it simply calls AddChar()
// and waits for an error or state end.
//RETURNS: True on success and False on failure.
/*************************************************************************/
BOOL CCmdParse::ProcessCmdLine()
{
State = e_start;
Previous = State; //may be used in the future
m_pCurrent = &m_szParseString[0];
memset(m_Token,'\0',512);
while(State != e_end)
{
switch(State)
{
//
case e_error:
return FALSE;
default:
AddChar();
}
}
return TRUE;
}

View File

@ -1,48 +0,0 @@
/* -*- 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.
*/
//command line parser class
//takes a command line and parses out arguments separated by spaces
//and whole arguments with spaces surrounded by quotes.
enum States {e_start, e_quote,e_end_quote, e_space, e_other, e_error, e_end};
class CCmdParse
{
void AddNewToken();
void AddChar();
public:
States State;
States Previous;//currently not being used. may be later
char m_szParseString[512];
CStringList *m_pStringList;
char *m_pCurrent;
char m_Token[512];
int m_nIndex;
CCmdParse(char *pszStringToParse,CStringList &lStringList); //No need to call Init() if used
CCmdParse(); //must call Init(...,...) with this constructor prior to calling ProcessCmdLine()
~CCmdParse();
BOOL ProcessCmdLine();
void Init(char *pszStringToParse,CStringList &lStringList);
};

View File

@ -1,357 +0,0 @@
/* -*- 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.
*/
// cntritem.cpp : implementation of the CNetscapeCntrItem class
//
#include "stdafx.h"
#include "cntritem.h"
#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif
#ifndef XP_WIN32
#include "olenls.h"
#define OLESTR(str) str
#endif
/////////////////////////////////////////////////////////////////////////////
// CNetscapeCntrItem implementation
#ifndef _AFXDLL
#undef new
#endif
IMPLEMENT_SERIAL(CNetscapeCntrItem, COleClientItem, 0)
#ifndef _AFXDLL
#define new DEBUG_NEW
#endif
extern void FE_ConvertSpace(char *newName);
CNetscapeCntrItem::CNetscapeCntrItem(CGenericDoc* pContainer)
: COleClientItem(pContainer)
{
m_bLoading = FALSE; // Not loading.
m_bBroken = FALSE; // Not broken.
m_bDelayed = FALSE; // Not delayed.
m_iLock = 0; // No one is referencing us.
m_pOriginalItem = NULL;
m_isFullPage = FALSE;
m_isDirty = FALSE;
m_bIsOleItem = FALSE;
m_bSetExtents = FALSE;
m_bCanSavedByOLE = FALSE;
m_idSavedAs =DISPID_UNKNOWN;
}
CNetscapeCntrItem::~CNetscapeCntrItem()
{
// If we've something loaded, then release it.
if(m_bLoading == FALSE && m_bBroken == FALSE && m_bDelayed == FALSE) {
// Assuming we're valid.
Release(OLECLOSE_SAVEIFDIRTY);
}
}
void CNetscapeCntrItem::OnActivate()
{
#if _MSC_VER >= 1200
USES_CONVERSION;
#endif
char * pSource = NULL;
const char* ptr;
LPDISPATCH pdisp;
HRESULT hr;
#if _MSC_VER < 1200
int _convert;
#endif
if (m_lpObject->QueryInterface(IID_IDispatch, (void**)&pdisp) == S_OK){
#ifdef XP_WIN32
LPCOLESTR lpOleStr = T2COLE("SaveAs");
hr = pdisp->GetIDsOfNames(IID_NULL, (unsigned short **)&lpOleStr, 1, LOCALE_USER_DEFAULT, &m_idSavedAs);
pdisp->Release();
if (hr == S_OK)
m_bCanSavedByOLE = TRUE;
else
m_idSavedAs = DISPID_UNKNOWN;
#else
m_idSavedAs = DISPID_UNKNOWN;
#endif
}
const char* ptr1 = m_csAddress;
if (NET_IsLocalFileURL((char*)ptr1)) {
XP_ConvertUrlToLocalFile(m_csAddress, &pSource);
m_csDosName = *pSource; // pick up the drive name.
m_csDosName += ":";
m_csDosName += strchr(pSource, '\\'); // pick up the real file name.
ptr = m_csDosName;
FE_ConvertSpace((char*)ptr);
XP_FREE(pSource);
}
// the object does not support ole automation, try to find out if this is a storagefile, so
// we can use OLESave().
if (!m_bCanSavedByOLE) {
#ifdef XP_WIN32 // we will only want to handle saving when the object had storage file.
#if _MSC_VER < 1200
int _convert;
#endif
LPCOLESTR lpsz = A2CW(m_csDosName);
if (StgIsStorageFile(lpsz) == S_OK)
m_bCanSavedByOLE = TRUE;
#else
HRESULT sc1 = StgIsStorageFile(m_csDosName);
if (GetScode(sc1) == S_OK)
m_bCanSavedByOLE = TRUE;
#endif
}
CGenericView* pView = GetActiveView();
CFrameGlue *pFrameGlue = pView->GetFrame();
if(pFrameGlue != NULL) {
m_bLocationBarShowing = pFrameGlue->GetChrome()->GetToolbarVisible(ID_LOCATION_TOOLBAR);
}
COleClientItem::OnActivate();
}
void CNetscapeCntrItem::OnChange(OLE_NOTIFICATION nCode, DWORD dwParam)
{
#ifdef MOZ_NGLAYOUT
XP_ASSERT(0);
#else
COleClientItem::OnChange(nCode, dwParam);
// this is a hack to test if we need to ask user to save the file or not.
// since I can not get lpPersistStorage->IsDirty() to give me the correct
// answer.
if (nCode == OLE_CLOSED)
m_isDirty = FALSE;
if (nCode == OLE_CHANGED && dwParam == DVASPECT_CONTENT)
m_isDirty = TRUE;
// Update all references to the item manually.
MWContext *pContext = GetDocument()->GetContext()->GetContext();
POSITION rIndex = m_cplElements.GetHeadPosition();
LO_EmbedStruct *pLayoutData;
while(rIndex != NULL) {
pLayoutData = (LO_EmbedStruct *)m_cplElements.GetNext(rIndex);
if (pContext->compositor) {
XP_Rect rect;
CL_GetLayerBbox(pLayoutData->objTag.layer, &rect);
CL_UpdateLayerRect(CL_GetLayerCompositor(pLayoutData->objTag.layer),
pLayoutData->objTag.layer, &rect, PR_FALSE);
}
else
pContext->funcs->DisplayEmbed(pContext, FE_VIEW, pLayoutData);
}
#endif /* MOZ_NGLAYOUT */
}
BOOL CNetscapeCntrItem::OnChangeItemPosition(const CRect& rectPos)
{
// Change the position of the item.
// Let this happen for them, we won't change layout, and we'll see how it goes.
if(FALSE == COleClientItem::OnChangeItemPosition(rectPos)) {
return(FALSE);
}
return(TRUE);
}
void CNetscapeCntrItem::OnGetItemPosition(CRect& rectPos) {
// Give them coordinates to the position of the in place activated item.
// So, which item was selected? We need layout data.
CGenericDoc *pDoc = GetDocument();
if(!pDoc) {
return;
}
CDCCX *pContextCX = pDoc->GetContext();
if(!pContextCX || pContextCX->IsFrameContext() == FALSE) {
return;
}
CWinCX *pWinCX = VOID2CX(pContextCX, CWinCX);
if(pWinCX->m_pSelected == NULL) {
// Don't do anything, we don't know of any selection.
return;
}
// Okay, we know about the selected item.
// Now, we need to figure out where it is located in the view.
HDC hdc = pWinCX->GetContextDC();
long lLeft = pWinCX->m_pSelected->objTag.x + pWinCX->m_pSelected->objTag.x_offset - pWinCX->GetOriginX();
long lRight = lLeft + pWinCX->m_pSelected->objTag.width;
long lTop = pWinCX->m_pSelected->objTag.y + pWinCX->m_pSelected->objTag.y_offset - pWinCX->GetOriginY();
long lBottom = lTop + pWinCX->m_pSelected->objTag.height;
// Convert our twips into pixels.
RECT crConvert;
::SetRect(&crConvert, CASTINT(lLeft), CASTINT(lTop), CASTINT(lRight), CASTINT(lBottom));
::LPtoDP(hdc, (POINT*) &crConvert, 2);
rectPos = crConvert;
pWinCX->ReleaseContextDC(hdc);
}
void CNetscapeCntrItem::OnDeactivateUI(BOOL bUndoable)
{
COleClientItem::OnDeactivateUI(bUndoable);
// Close an in-place active item whenever it removes the user
// interface. The action here should match as closely as possible
// to the handling of the escape key in the view.
if( IsInPlaceActive() == TRUE) {
TRY {
Deactivate();
}
CATCH(CException, e) {
// Something went wrong in OLE (other app down).
// No complicated handling here, just keep running.
}
END_CATCH
}
}
// TODO: We can remove this check once everyone moves to MSVC 4.0
#if _MSC_VER >= 1000
BOOL CNetscapeCntrItem::OnUpdateFrameTitle() {
// Nothing doing. We stay the same.
// This ASSERTs anyhow, if it continues on down.
return FALSE;
}
#else
void CNetscapeCntrItem::OnUpdateFrameTitle() {
// Nothing doing. We stay the same.
// This ASSERTs anyhow, if it continues on down.
return;
}
#endif
BOOL CNetscapeCntrItem::OnGetWindowContext(CFrameWnd **ppMainFrame, CFrameWnd **ppDocFrame, LPOLEINPLACEFRAMEINFO lpFrameInfo) {
// First call the base.
BOOL bRetval = COleClientItem::OnGetWindowContext(ppMainFrame, ppDocFrame, lpFrameInfo);
// Now, override the values with ones that make sense to us.
CGenericDoc *pDoc = GetDocument();
CDCCX *pCX = pDoc->GetContext();
if(pCX != NULL && pCX->IsFrameContext() == TRUE) {
// Get the frame from the window context.
CWinCX *pWinCX = (CWinCX *)pCX;
*ppMainFrame = pWinCX->GetFrame()->GetFrameWnd();
*ppDocFrame = NULL; // Act like SDI.
// It's possible that there is no frame.
// In which case we should do what? Fail.
if(pWinCX->GetFrame()->GetFrameWnd() == NULL) {
bRetval = FALSE;
}
}
else {
bRetval = FALSE;
*ppMainFrame = NULL;
*ppDocFrame = NULL;
}
return(bRetval);
}
BOOL CNetscapeCntrItem::OnShowControlBars(CFrameWnd *pFrameWnd, BOOL bShow) {
// Call the base, they'll at least handle our normal control bar.
BOOL bToolBarChanged = FALSE;
// Get the frame glue.
CFrameGlue *pFrameGlue = CFrameGlue::GetFrameGlue(pFrameWnd);
if(pFrameGlue != NULL) {
if(bShow == FALSE) {
// Hide our stuff.
if(m_bLocationBarShowing){
pFrameGlue->GetChrome()->ShowToolbar(ID_LOCATION_TOOLBAR, FALSE);
bToolBarChanged = TRUE;
}
}
else {
// Show our stuff.
// Assuming that we'll always be called to hide before we're called to show.
if(m_bLocationBarShowing){
pFrameGlue->GetChrome()->ShowToolbar(ID_LOCATION_TOOLBAR, m_bLocationBarShowing);
bToolBarChanged = TRUE;
}
}
}
BOOL bToolBarChanged1 = COleClientItem::OnShowControlBars(pFrameWnd, bShow);
return(bToolBarChanged || bToolBarChanged1);
}
void CNetscapeCntrItem::Serialize(CArchive& ar)
{
ASSERT_VALID(this);
// Call base class first to read in COleClientItem data.
// Since this sets up the m_pDocument pointer returned from
// CNetscapeCntrItem::GetDocument, it is a good idea to call
// the base class Serialize first.
COleClientItem::Serialize(ar);
// now store/retrieve data specific to CNetscapeCntrItem
if (ar.IsStoring())
{
}
else
{
}
}
BOOL CNetscapeCntrItem::CanActivate() {
// Can't activate if the document itself is inplace active.
CGenericDoc *pDoc = GetDocument();
ASSERT_VALID(pDoc);
ASSERT(pDoc->IsKindOf(RUNTIME_CLASS(COleServerDoc)));
if(pDoc->IsInPlaceActive()) {
return(FALSE);
}
return(COleClientItem::CanActivate());
}
/////////////////////////////////////////////////////////////////////////////
// CNetscapeCntrItem diagnostics
#ifdef _DEBUG
void CNetscapeCntrItem::AssertValid() const
{
COleClientItem::AssertValid();
}
void CNetscapeCntrItem::Dump(CDumpContext& dc) const
{
COleClientItem::Dump(dc);
}
#endif
/////////////////////////////////////////////////////////////////////////////

View File

@ -1,105 +0,0 @@
/* -*- 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.
*/
#ifndef __CNTRITEM_H
#define __CNTRITEM_H
// cntritem.h : interface of the CNetscapeCntrItem class
//
class CGenericDoc;
class CGenericView;
class CNetscapeCntrItem : public COleClientItem
{
DECLARE_SERIAL(CNetscapeCntrItem)
// Constructors
public:
CNetscapeCntrItem(CGenericDoc* pContainer = NULL);
// Note: pContainer is allowed to be NULL to enable IMPLEMENT_SERIALIZE.
// IMPLEMENT_SERIALIZE requires the class have a constructor with
// zero arguments. Normally, OLE items are constructed with a
// non-NULL document pointer.
// Attributes
public:
BOOL m_bLoading; // If we are currently loading, from the net until completed creation from file.
BOOL m_bBroken; // Consider this item broken.
BOOL m_bDelayed; // We have postponed loading of this item.
BOOL m_isDirty;
BOOL m_isFullPage;
BOOL m_bIsOleItem;
BOOL m_bSetExtents;
CString m_csAddress; // The url that this originated from, to avoid redundant reloads.
CString m_csFileName; // The local temp file this item is located in, so on destruction we can also delete this file.
CString m_csDosName; // The dos file name for m_csAddress if it is a local file.
BOOL m_bCanSavedByOLE;
DISPID m_idSavedAs;
CFile m_cfOutput; // Output temporary file.
int m_iLock; // How many references to this item anyhow? To avoid freeing at inappropiate times.
CPtrList m_cplUnblock; // List of layout elements to unblock once the load is complete. Flushed on a per load basis.
CPtrList m_cplDisplay; // List of layout elements that we will manually update once the load is complete. Flushed on a per load basis.
CPtrList m_cplElements; // List of all layout elements referencing this item.
BOOL m_bLocationBarShowing; // Wether or not the URL bar was present in the Frame before we were activated.
BOOL m_bStarterBarShowing; // Wether or not the URL bar was present in the Frame before we were activated.
CNetscapeCntrItem* m_pOriginalItem; // Needed when we reuse cached existing NPEmbeddedApp(s), e.g. when printing
// Operations
public:
CGenericDoc* GetDocument()
{ return (CGenericDoc *)COleClientItem::GetDocument(); }
CGenericView* GetActiveView()
{ return (CGenericView *)COleClientItem::GetActiveView(); }
BOOL IsDirty() {return m_isDirty;}
// Implementation
public:
~CNetscapeCntrItem();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
virtual void Serialize(CArchive& ar);
virtual void OnDeactivateUI(BOOL bUndoable);
virtual BOOL OnShowControlBars(CFrameWnd *pFrame, BOOL bShow);
// TODO: We can remove this check once everyone moves to MSVC 4.0
#if defined(MSVC4)
virtual BOOL OnUpdateFrameTitle();
#else
virtual void OnUpdateFrameTitle();
#endif // MSVC4
protected:
virtual void OnChange(OLE_NOTIFICATION wNotification, DWORD dwParam);
virtual BOOL OnChangeItemPosition(const CRect& rectPos);
virtual void OnGetItemPosition(CRect& rectPos);
virtual BOOL OnGetWindowContext(CFrameWnd **ppMainFrame, CFrameWnd **ppDocFrame, LPOLEINPLACEFRAMEINFO lpFrameInfo);
virtual BOOL CanActivate();
virtual void OnActivate();
};
/////////////////////////////////////////////////////////////////////////////
#endif // __CNTRITEM_H

View File

@ -1,49 +0,0 @@
/* -*- 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.
*/
#ifndef __COLLAPSE_H
#define __COLLAPSE_H
typedef enum {
collapse_open = 0,
collapse_closed
} COLLAPSE_STATE;
class CNSCollapser
{
protected:
HBITMAP m_hVertSectionBitmap;
HBITMAP m_hHTabBitmap;
BOOL m_bHilite;
CRect m_rect;
CWnd * m_pWnd;
COLLAPSE_STATE m_cState;
int m_iSubtract;
UINT m_nTimer;
UINT m_cmdId;
public:
CNSCollapser();
~CNSCollapser();
void GetRect(CRect & rect) { rect = m_rect; }
BOOL ButtonPress(POINT & point);
void Initialize(CWnd * pWnd = NULL, UINT nCmd = 0);
void TimerEvent(UINT nIDEvent);
void DrawCollapseWidget(CDC &dc, COLLAPSE_STATE state = collapse_closed, BOOL bHilite = FALSE, int iSubtract = 0);
void MouseAround(POINT & point);
};
#endif

File diff suppressed because it is too large Load Diff

View File

@ -1,232 +0,0 @@
/* -*- 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.
*/
#ifndef __COMPBAR_H
#define __COMPBAR_H
#include <afxwin.h>
#include <afxext.h>
#include "rosetta.h"
#include "compstd.h"
#include "msgcom.h"
#include "addrbook.h"
#include "apiaddr.h"
#include "apiimg.h"
#include "collapse.h"
#include "tooltip.h"
class CComposeEdit;
class CNSAddressList;
class CNSAttachmentList;
#define MAX_TIPS 4
class CComposeSubjectEdit;
class CComposeBar : public CDialogBar,
public IAddressParent
{
protected:
class CNSComposeToolInfo
{
public:
CRect m_rect;
UINT m_idText;
WPARAM m_idCommand;
CString m_csToolTip;
void Initialize(UINT idText, CRect & rect, WPARAM idCommand)
{
m_csToolTip = szLoadString(idText);
m_idText = idText;
m_rect = rect;
m_idCommand = idCommand;
}
};
LPUNKNOWN m_pUnkImage;
LPUNKNOWN m_pUnkAddressControl;
LPIMAGEMAP m_pIImage;
public:
CNSToolTip2 * m_pToolTip;
CNSCollapser collapser;
LPADDRESSCONTROL m_pIAddressList;
LPUNKNOWN m_pUnkAddress;
int m_iMinSize;
int m_iMaxSize;
int m_iHeight;
int m_iBoxHeight;
int m_cxChar;
int m_iFirstX;
int m_iSelectedTab;
int m_iPriorityIdx;
char * m_pszMessageFormat;
char * m_pszCharSet;
BOOL m_bReceipt;
BOOL m_bEncrypted;
BOOL m_bSigned;
BOOL m_bAttachVCard;
BOOL m_bUse8Bit;
BOOL m_bUseUUENCODE;
int m_iTotalAttachments;
int m_iPrevHeight;
CNSComposeToolInfo m_ToolTipInfo[MAX_TIPS];
HFONT m_cfTextFont;
HFONT m_cfStaticFont;
HFONT m_cfSubjectFont;
CComposeEdit * m_pComposeEdit;
#ifdef BUTTONS
CWnd * m_pButton[3];
#endif
CButton * m_pReturnReceipt;
CButton * m_pEncrypted;
CButton * m_pSigned;
CButton * m_pUse8Bit;
CButton * m_pUseUUENCODE;
CNSAttachmentList * m_pAttachmentList;
CWnd * m_pWidget;
CComposeSubjectEdit * m_pSubjectEdit;
CStatic * m_pPriorityText;
CStatic * m_pSubjectEditText;
CStatic * m_pMessageFormatText;
CComboBox * m_pPriority;
CComboBox * m_pMessageFormat;
CNSAttachDropTarget * m_pDropTarget;
MWContext *m_pContext;
virtual CSize CalcFixedLayout(BOOL bStretch, BOOL bHorz );
void Enable3d(BOOL bEnable);
public:
CEdit * m_pSubject;
BOOL m_bClosed;
BOOL m_bHidden;
BOOL m_bSizing;
BOOL m_bCanSize;
int m_iY;
CComposeBar (MWContext *pContext );
~CComposeBar ( );
LPADDRESSCONTROL GetAddressWidgetInterface();
void ShowTab(int idx);
int GetTab();
void AttachFile(void);
void AttachUrl(void);
inline BOOL IsCollapsed(void) { return m_bClosed; }
void SetComposeEdit ( CComposeEdit * pEdit )
{
m_pComposeEdit = pEdit;
}
CComposeEdit * GetComposeEdit ( void )
{
return m_pComposeEdit;
}
void SetCSID(int m_iCSID);
HG29792
void SetReturnReceipt(BOOL bReceipt) { m_bReceipt = bReceipt; }
void SetUse8Bit(BOOL bUse8Bit) { m_bUse8Bit = bUse8Bit; }
void SetUseUUENCODE(BOOL bUseUUENCODE) {m_bUseUUENCODE = bUseUUENCODE; }
BOOL GetReturnReceipt(void) { return m_bReceipt; }
BOOL GetUse8Bit(void) { return m_bUse8Bit; }
BOOL GetUseUUENCODE(void) { return m_bUseUUENCODE; }
void Draw3DStaticEdgeSimulation(CDC & dc, CRect &rect, BOOL bReverse = FALSE);
void DrawVerticalTab(CDC &, int, CRect &);
BOOL IsAttachmentsMailOnly(void);
BOOL TabControl(BOOL bShift = FALSE, BOOL bControl = FALSE, CWnd * pWnd = (CWnd*)TABCTRL_HOME);
void CalcFieldLayout(void);
void DisplayHeaders ( MSG_HEADER_SET );
int GetHeightNeeded ( void );
void CreateAddressingBlock(void);
void CreateStandardFields(void);
void CreateAddressPage(void);
void CreateAttachmentsPage(void);
void CreateOptionsPage(void);
void DestroyOptionsPage(void);
void DestroyAddressPage(void);
void DestroyStandardFields(void);
void DestroyAttachmentsPage(void);
void UpdateFixedSize ( );
void UpdateHeaderInfo ( void );
void UpdateRecipientInfo ( char *pTo, char *pCc, char *pBcc );
int GetTotalAttachments(void);
void UpdateAttachmentInfo(int nTotal = -1);
void TabChanging(int tab);
void TabChanged(int tab);
void GetWidgetRect(CRect &WinRect, CRect &rect);
BOOL GetAttachMyCard() { return m_bAttachVCard; }
void SetAttachMyCard(BOOL bAttach) { m_bAttachVCard = bAttach; }
void Cleanup(void);
void UpdateSecurityOptions(void);
virtual void AddedItem (HWND hwnd, LONG id,int index);
virtual int ChangedItem (char * pString, int index, HWND hwnd, char ** ppszFullName, unsigned long* entryID = NULL, UINT* bitmapID = NULL);
virtual void DeletedItem (HWND hwnd, LONG id,int index);
virtual char * NameCompletion (char *);
virtual void StartNameCompletionSearch();
virtual void StopNameCompletionSearch();
virtual void SetProgressBarPercent(int32 lPercent);
virtual void SetStatusText(const char* pMessage );
virtual CWnd *GetOwnerWindow();
virtual int OnToolHitTest( CPoint point, TOOLINFO* pTI ) const;
BOOL ProcessVCardData(COleDataObject * pDataObject,CPoint &point);
BOOL ProcessAddressBookIndexFormat(COleDataObject *pDataObject, DROPEFFECT effect,
CPoint &point);
BOOL AddURLToAddressPane(COleDataObject * pDataObject, CPoint &point, LPSTR szURL);
void OnAttachTab(void);
void OnAddressTab(void);
void OnOptionsTab(void);
void OnCollapse(void);
void OnToggleShow(void);
inline BOOL IsVisible() {return !m_bHidden;}
protected:
#ifdef XP_WIN16
BOOL PreTranslateMessage( MSG* pMsg );
#endif
void UpdateOptionsInfo();
afx_msg LRESULT OnSizeParent(WPARAM wParam, LPARAM lParam);
afx_msg void OnDropFiles( HDROP hDropInfo );
afx_msg void OnMouseMove( UINT nFlags, CPoint point );
afx_msg int OnCreate ( LPCREATESTRUCT );
afx_msg void OnPaint();
afx_msg BOOL OnSetCursor( CWnd* pWnd, UINT nHitTest, UINT message );
afx_msg void OnButtonAttach(void);
afx_msg void OnSize( UINT nType, int cx, int cy );
afx_msg LONG OnLeavingLastField(UINT, LONG);
afx_msg void OnLButtonDown( UINT nFlags, CPoint point );
afx_msg void OnLButtonUp( UINT nFlags, CPoint point );
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
afx_msg void OnTimer( UINT nIDEvent );
afx_msg void OnUpdateToolBar(void);
afx_msg void OnUpdateOptions(void);
DECLARE_MESSAGE_MAP()
friend class CComposeFrame;
};
#endif

View File

@ -1,636 +0,0 @@
/* -*- 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.
*/
#include "stdafx.h"
#include "template.h"
#include "msgcom.h"
#include "wfemsg.h"
#include "compstd.h"
#include "compbar.h"
#include "compmisc.h"
#include "compfrm.h"
#include "edt.h"
#include "edview.h"
#include "intl_csi.h"
#include "prefapi.h"
#include "apiaddr.h"
#include "postal.h"
#include "mailmisc.h"
#include "dlghtmrp.h"
#include "dlghtmmq.h"
extern "C" {
#include "xpgetstr.h"
extern int MK_MSG_MSG_COMPOSITION;
};
extern "C" int FE_LoadExchangeInfo(MWContext * context);
extern "C" MSG_Pane * DoAltMailComposition(MWContext *pOldContext, MSG_CompositionFields* fields);
int WFE_InsertMessage(void *closure, const char * data);
extern "C" void FE_DestroyMailCompositionContext(MWContext *pContext)
{
CGenericFrame * pFrame = wfe_FrameFromXPContext(pContext);
if ( pFrame ) {
CComposeFrame * pCompose = (CComposeFrame *) pFrame;
if (pCompose->UseHtml())
EDT_SetDirtyFlag(pContext,FALSE);
else
pCompose->GetEditorParent()->m_bModified = FALSE;
pCompose->SetMsgPane(NULL);
if(pCompose) {
pCompose->PostMessage ( WM_CLOSE );
}
}
}
extern "C" int FE_GetMessageBody(MSG_Pane *pPane, char **ppBody, uint32 *ulBodySize, MSG_FontCode **ppFontChanges)
{
ASSERT(pPane);
CComposeFrame * pCompose = (CComposeFrame *) MSG_GetFEData(pPane);
ASSERT(pCompose);
MWContext *pContext = pCompose->GetMainContext()->GetContext();
ASSERT(pContext);
if (pCompose->UseHtml())
{
MSG_SetHTMLMarkup(pPane,TRUE);
*ppBody = NULL;
*ulBodySize = 0;
if ( pCompose )
{
// Danger!!! This is not legal!!! We must change this to be a real XP_HUGE for win16.
// see bug #39756
EDT_SaveToBuffer(pContext,(XP_HUGE_CHAR_PTR*) ppBody);
if ( !*ppBody)
return 1;
else {
size_t lsize;
lsize = strlen(*ppBody);
*ulBodySize = lsize;
return lsize;
}
}
return 0;
}
// new compose window code
size_t lsize = 0;
#ifdef XP_WIN16
unsigned int textLength; // Cannot use uint32/int32; the compiler won't
// generate the correct code. Use unsigned int, at least
// we could get over with the 32767 boundary.
// Although 16-bit CEdit::GetWindowTextLength returns int casting it to
// unsigned int we can still get the correct text length if the text length is
// greater than 32767
textLength = (unsigned int) pCompose->GetEditor()->GetWindowTextLength();
#else
int32 textLength;
textLength = pCompose->GetEditor()->GetWindowTextLength();
#endif
if ( textLength >= 0 )
{
char * tmp = (char *)XP_CALLOC(1,textLength+1);
ASSERT ( tmp );
pCompose->GetEditor()->GetWindowText(tmp, textLength+1);
if (pCompose->GetWrapLongLines())
{
int32 lineWidth = 72;
PREF_GetIntPref("mailnews.wraplength", &lineWidth);
if (lineWidth < 10) lineWidth = 10;
if (lineWidth > 30000) lineWidth = 30000;
*ppBody = (char *) XP_WordWrap(INTL_DefaultWinCharSetID(pContext),
(unsigned char *)tmp, lineWidth, 1 /* look for '>' */);
free(tmp);
}
else
{
/* Else, don't wrap it at all. */
*ppBody = tmp;
}
if (ppBody && *ppBody)
for (const char *ptr = *ppBody; ptr && *ptr; ptr++)
lsize++;
}
*ulBodySize = lsize;
return 0;
}
//
// Create a composition window
//
extern "C" void FE_InitializeMailCompositionContext(MSG_Pane *pComposePane,
const char *pFrom,
const char *pReplyTo,
const char *pTo,
const char *pCc,
const char *pBcc,
const char *pFcc,
const char *pNewsgroups,
const char *pFollowupTo,
const char *pSubject,
const char *pAttachment)
{
MSG_SetCompHeader(pComposePane, MSG_TO_HEADER_MASK, pTo);
MSG_SetCompHeader(pComposePane, MSG_FROM_HEADER_MASK, pFrom);
MSG_SetCompHeader(pComposePane, MSG_SUBJECT_HEADER_MASK, pSubject);
MSG_SetCompHeader(pComposePane, MSG_CC_HEADER_MASK, pCc);
MSG_SetCompHeader(pComposePane, MSG_BCC_HEADER_MASK, pBcc);
MSG_SetCompHeader(pComposePane, MSG_FCC_HEADER_MASK, pFcc);
MSG_SetCompHeader(pComposePane, MSG_REPLY_TO_HEADER_MASK, pReplyTo);
MSG_SetCompHeader(pComposePane, MSG_FOLLOWUP_TO_HEADER_MASK, pFollowupTo);
MSG_SetCompHeader(pComposePane, MSG_NEWSGROUPS_HEADER_MASK, pNewsgroups);
}
MWContext * g_NastyContextSavingHack = NULL;
// create a new xpContext with type == MWContextMessageComposition
extern "C" MSG_Pane *FE_CreateCompositionPane(MWContext *pOldContext,
MSG_CompositionFields* fields,
const char *pInitialText,
MSG_EditorType editorType)
{
if(!theApp.m_hPostalLib) {
CGenericDoc * pDocument;
// Don't allow a compose window to be created if the user hasn't
// specified an email address
const char *real_addr = FE_UsersMailAddress();
if (MISC_ValidateReturnAddress(pOldContext, real_addr) < 0)
return NULL;
XP_Bool htmlCompose;
PREF_GetBoolPref("mail.html_compose",&htmlCompose);
if (theApp.m_bReverseSenseOfHtmlCompose)
htmlCompose = !htmlCompose;
if (editorType == MSG_HTML_EDITOR)
htmlCompose = TRUE;
else if (editorType == MSG_PLAINTEXT_EDITOR)
htmlCompose = FALSE;
INTL_CharSetInfo csi = LO_GetDocumentCharacterSetInfo(pOldContext);
int16 win_csid = INTL_GetCSIWinCSID(csi);
if (!MSG_GetForcePlainText(fields) && htmlCompose)
pDocument = (CGenericDoc*)theApp.m_ComposeTemplate->OpenDocumentFile(NULL, win_csid);
else
pDocument = (CGenericDoc*)theApp.m_TextComposeTemplate->OpenDocumentFile(NULL, win_csid);
g_NastyContextSavingHack = pOldContext;
if ( pDocument )
{
CWinCX * pContext = (CWinCX*) pDocument->GetContext();
if ( pContext ) {
MSG_CompositionPaneCallbacks Callbacks;
Callbacks.CreateRecipientsDialog= CreateRecipientsDialog;
Callbacks.CreateAskHTMLDialog= CreateAskHTMLDialog;
MWContext *context = pContext->GetContext();
CComposeFrame *pCompose = (CComposeFrame *) pContext->GetFrame()->GetFrameWnd();
pCompose->SetComposeStuff(pOldContext,fields); // squirl away stuff for post-create
// This needs to be set TRUE if using the old non-HTML text frame
// to prevent dropping dragged URLs
pContext->m_bDragging = !pCompose->UseHtml();
if (!pCompose->UseHtml())
{
pCompose->SetMsgPane(MSG_CreateCompositionPane(
pContext->GetContext(),
pOldContext, g_MsgPrefs.m_pMsgPrefs, fields,
WFE_MSGGetMaster()));
}
else
{
pCompose->SetMsgPane(MSG_CreateCompositionPaneNoInit(
pContext->GetContext(),
g_MsgPrefs.m_pMsgPrefs,
WFE_MSGGetMaster()));
//set the callbacks for askHTML and Recipients dialogs
MSG_SetCompositionPaneCallbacks( pCompose->GetMsgPane(),
&Callbacks,
0);
if (pCompose->GetMsgPane())
MSG_SetHTMLMarkup(pCompose->GetMsgPane(), TRUE);
}
ASSERT(pCompose->GetMsgPane());
MSG_SetFEData(pCompose->GetMsgPane(),(void *)pCompose);
pCompose->UpdateAttachmentInfo();
// Pass doccsid and win_csid info to new context for MailToWin conversion
INTL_CharSetInfo old_csi = LO_GetDocumentCharacterSetInfo(pOldContext);
INTL_CharSetInfo new_csi = LO_GetDocumentCharacterSetInfo(context);
int16 doccsid = INTL_GetCSIDocCSID(old_csi);
INTL_SetCSIDocCSID(new_csi,
(doccsid ? doccsid : INTL_DefaultDocCharSetID(pOldContext)));
INTL_SetCSIWinCSID(new_csi,
(win_csid ? win_csid : INTL_DocToWinCharSetID(INTL_GetCSIDocCSID(new_csi))));
pCompose->DisplayHeaders(NULL);
CComposeBar * pBar = pCompose->GetComposeBar();
ASSERT(pBar);
LPADDRESSCONTROL pIAddressList = pBar->GetAddressWidgetInterface();
if (!pIAddressList->IsCreated())
{
pBar->CreateAddressingBlock();
}
if (!pCompose->UseHtml())
{
pCompose->CompleteComposeInitialization();
const char * pBody = pInitialText ? pInitialText : MSG_GetCompBody(pCompose->GetMsgPane());
if (pBody)
{
FE_InsertMessageCompositionText(context,pBody,TRUE);
// We don't want to quote the original if open as draft
// Check for the editorType before we do the quoting
// Since only draft code will specify what editor to
// use, checking for editorType == MSG_DEFAULT will do
// the work.
if (MSG_ShouldAutoQuote(pCompose->GetMsgPane()) &&
editorType == MSG_DEFAULT)
{
pCompose->SetQuoteSelection();
MSG_QuoteMessage(
pCompose->GetMsgPane(),
WFE_InsertMessage,
(void*)pCompose->GetMainContext()->GetContext());
}
}
}
else
{
pCompose->SetInitialText (pInitialText);
URL_Struct * pUrl = NET_CreateURLStruct(EDT_NEW_DOC_URL,NET_DONT_RELOAD);
if (pUrl != NULL)
{
// pUrl->pre_exit_fn = wfe_GoldDoneLoading;
pUrl->internal_url = TRUE;
pContext->GetUrl(pUrl, FO_CACHE_AND_PRESENT);
pContext->GetContext()->bIsComposeWindow = TRUE;
}
}
if (MSG_GetAttachmentList(pCompose->GetMsgPane()))
pCompose->SetModified(TRUE);
else
pCompose->SetModified(FALSE);
// Post message to compose window to set the initial focus.
pCompose->PostMessage(WM_COMP_SET_INITIAL_FOCUS);
return pCompose->GetMsgPane();
}
}
return NULL;
}
else
return DoAltMailComposition(pOldContext, fields);
}
extern "C" void FE_RaiseMailCompositionWindow(MSG_Pane *pPane)
{
CComposeFrame * pCompose = (CComposeFrame *) MSG_GetFEData(pPane);
#ifdef XP_WIN32
if(!theApp.m_hPostalLib) {
#endif
pCompose->SendMessageToDescendants(WM_INITIALUPDATE, 0, 0, TRUE, TRUE);
pCompose->ShowWindow(SW_SHOW);
// Make Sure OnInitialUpdate gets called for the view.
pCompose->DisplayHeaders(pCompose->GetSavedHeaders());
#ifdef XP_WIN32
}
else {
FE_LoadExchangeInfo(pCompose->GetMainContext()->GetContext());
}
#endif
}
extern "C" void FE_InsertMessageCompositionText(MWContext * context,
const char* text,
XP_Bool leaveCursorAtBeginning)
{
if (context) {
if (ABSTRACTCX(context)->IsDestroyed())
return;
CGenericFrame * pFrame = wfe_FrameFromXPContext(context);
if (pFrame)
{
CComposeFrame * pCompose = (CComposeFrame *) pFrame;
if ( pCompose )
{
int nStartChar, nEndChar;
if (!pCompose->UseHtml())
{
if ( leaveCursorAtBeginning )
pCompose->GetEditor()->GetSel(nStartChar, nEndChar);
pCompose->GetEditor()->ReplaceSel ( text );
if ( leaveCursorAtBeginning )
pCompose->GetEditor()->SetSel (nStartChar, nEndChar, TRUE );
}
else
{
ED_BufferOffset ins = -1;
if ( leaveCursorAtBeginning ){
ins = EDT_GetInsertPointOffset( context );
}
EDT_PasteQuote( context, (char*) text );
if ( leaveCursorAtBeginning && ins != -1 ) {
EDT_SetInsertPointToOffset( context, ins, 0 );
}
}
pCompose->GetChrome()->StopAnimation();
}
}
}
}
extern "C" void FE_DoneWithMessageBody(MSG_Pane *pPane, char* body,
uint32 body_size)
{
XP_FREE(body);
}
extern "C" char * FE_PromptMessageSubject (MWContext * pContext)
{
HWND hWnd = GetFocus();
CString csText;
CString csDefault;
csText.LoadString(IDS_COMPOSE_NOSUBJECT);
csDefault.LoadString(IDS_COMPOSE_DEFAULTNOSUBJECT);
char * ptr = CFE_Prompt(pContext, csText, csDefault );
SetFocus(hWnd);
if (!ptr)
{
CGenericFrame * pFrame = wfe_FrameFromXPContext(pContext);
CComposeFrame * pCompose = (CComposeFrame *) pFrame;
pCompose->GetChrome()->StopAnimation();
}
return ptr;
}
#ifdef XP_WIN32
extern void FE_UpdateComposeWindowRecipients(MWContext *pContext,
char *pTo, char *pCc, char *pBcc)
{
CGenericFrame * pFrame = wfe_FrameFromXPContext(pContext);
CComposeFrame * pCompose = (CComposeFrame *) pFrame;
if ( pCompose )
{
CComposeBar * pBar = pCompose->GetComposeBar();
ASSERT(pBar);
pBar->UpdateRecipientInfo (pTo, pCc, pBcc);
}
}
#endif
extern "C" MSG_Pane * DoAltMailComposition(MWContext *pOldContext, MSG_CompositionFields* fields)
{
CGenericDoc * pDocument;
INTL_CharSetInfo csi = LO_GetDocumentCharacterSetInfo(pOldContext);
pDocument = (CGenericDoc*)theApp.m_TextComposeTemplate->OpenDocumentFile(NULL, INTL_GetCSIWinCSID(csi));
g_NastyContextSavingHack = pOldContext;
if ( pDocument )
{
CWinCX * pContext = (CWinCX*) pDocument->GetContext();
if ( pContext )
{
MWContext *context = pContext->GetContext();
CComposeFrame *pCompose = (CComposeFrame *) pContext->GetFrame()->GetFrameWnd();
pCompose->SetComposeStuff(pOldContext,fields); // squirl away stuff for post-create
pCompose->SetMsgPane(MSG_CreateCompositionPane(
pContext->GetContext(),
pOldContext, g_MsgPrefs.m_pMsgPrefs, fields,
WFE_MSGGetMaster()));
ASSERT(pCompose->GetMsgPane());
MSG_SetFEData(pCompose->GetMsgPane(),(void *)pCompose);
pCompose->DisplayHeaders(NULL);
FE_LoadExchangeInfo(context);
return pCompose->GetMsgPane();
}
}
return NULL;
}
#define MAX_MAIL_SIZE 300000
extern "C" void FE_DoneMailTo(PrintSetup * print)
{
ASSERT(print);
MWContext * context = (MWContext *) print->carg;
CGenericFrame * pFrame = wfe_FrameFromXPContext(context);
ASSERT(pFrame);
CComposeFrame * pCompose;
pCompose = (CComposeFrame *) pFrame;
ASSERT(pFrame);
MSG_Pane * pMsgPane = pCompose->GetMsgPane();
ASSERT(pMsgPane);
fclose(print->out);
//
// No no no, get the size the right way
//
char * buffer;
buffer = (char *) malloc(MAX_MAIL_SIZE + 5);
FILE * fp = fopen(print->filename, "r");
int len = fread(buffer, 1, MAX_MAIL_SIZE + 5, fp);
buffer[len] = '\0';
fclose(fp);
if(theApp.m_hPostalLib) {
if(theApp.m_bInitMapi) {
if(theApp.m_fnOpenMailSession) {
POSTCODE status = (*theApp.m_fnOpenMailSession) (NULL, NULL);
if(status == POST_OK) {
theApp.m_bInitMapi = FALSE;
}
else {
FE_DestroyMailCompositionContext(context);
return;
}
}
}
// create mail window with no quoting
if(theApp.m_fnComposeMailMessage)
(*theApp.m_fnComposeMailMessage) ((const char *) (const char *) MSG_GetCompHeader(pMsgPane, MSG_TO_HEADER_MASK),
(const char *) "", /* no refs field. BAD! BUG! */
(const char *) MSG_GetCompHeader(pMsgPane, MSG_ORGANIZATION_HEADER_MASK),
(const char *) "", /* no URL */
(const char *) MSG_GetCompHeader(pMsgPane, MSG_SUBJECT_HEADER_MASK),
buffer,
(const char *) MSG_GetCompHeader(pMsgPane, MSG_CC_HEADER_MASK),
(const char *) MSG_GetCompHeader(pMsgPane, MSG_BCC_HEADER_MASK));
// get rid of the file and free the memory
remove(print->filename);
// XP_FREE(print->filename);
// print->filename = NULL;
XP_FREE(buffer);
FE_DestroyMailCompositionContext(context);
return;
}
}
extern "C" int FE_LoadExchangeInfo(MWContext * context)
{
#ifdef MOZ_NGLAYOUT
XP_ASSERT(0);
#else
if(!context)
return(FALSE);
if(!theApp.m_hPostalLib)
return(FALSE);
CGenericFrame * pFrame = wfe_FrameFromXPContext(context);
ASSERT(pFrame);
CComposeFrame * pCompose;
pCompose = (CComposeFrame *) pFrame;
ASSERT(pFrame);
MSG_Pane * pMsgPane = pCompose->GetMsgPane();
ASSERT(pMsgPane);
History_entry * hist_ent = NULL;
if(g_NastyContextSavingHack)
hist_ent = SHIST_GetCurrent(&(g_NastyContextSavingHack->hist));
CString csURL;
if(hist_ent)
csURL = hist_ent->address;
else
csURL = "";
//Set hist_ent to NULL if context->title is "Message Composition"
//This is a nasty way of determining if we're in here in response
//to "Mail Doc" or "New Mail Message".
//Also, if there's To: field info present(pBar->m_pszTo) then
//we know that it's a Mailto: and set hist_ent to NULL
//Without this differentiation the code always sends the contents
//of the previously mailed document even when someone chooses
//"New Mail Message" or "Mailto:"
const char * pszTo = MSG_GetCompHeader(pMsgPane, MSG_TO_HEADER_MASK);
if(!strcmp(XP_GetString(MK_MSG_MSG_COMPOSITION), context->title) || strlen(pszTo) )
hist_ent = NULL;
// make sure there was a document loaded
if(!hist_ent) {
if(theApp.m_bInitMapi) {
if(theApp.m_fnOpenMailSession) {
POSTCODE status = (*theApp.m_fnOpenMailSession) (NULL, NULL);
if(status == POST_OK) {
theApp.m_bInitMapi = FALSE;
}
else {
FE_DestroyMailCompositionContext(context);
return(FALSE);
}
}
}
// create mail window with no quoting
if(theApp.m_fnComposeMailMessage)
(*theApp.m_fnComposeMailMessage) ((const char *) MSG_GetCompHeader(pMsgPane, MSG_TO_HEADER_MASK),
(const char *) "", /* no refs field. BAD! BUG! */
(const char *) MSG_GetCompHeader(pMsgPane, MSG_ORGANIZATION_HEADER_MASK),
(const char *) "", /* no URL */
(const char *) MSG_GetCompHeader(pMsgPane, MSG_SUBJECT_HEADER_MASK),
"",
(const char *) MSG_GetCompHeader(pMsgPane, MSG_CC_HEADER_MASK),
(const char *) MSG_GetCompHeader(pMsgPane, MSG_BCC_HEADER_MASK));
FE_DestroyMailCompositionContext(context);
return(TRUE);
}
URL_Struct * URL_s = SHIST_CreateURLStructFromHistoryEntry(g_NastyContextSavingHack, hist_ent);
// Zero out the saved data
memset(&URL_s->savedData, 0, sizeof(URL_s->savedData));
PrintSetup print;
XL_InitializeTextSetup(&print);
print.width = 68;
print.prefix = "";
print.eol = "\r\n";
char * name = WH_TempName(xpTemporary, NULL);
if(!name) {
FE_DestroyMailCompositionContext(context);
return(FALSE);
}
print.out = fopen(name, "w");
print.completion = (XL_CompletionRoutine) FE_DoneMailTo;
print.carg = context;
print.filename = name;
print.url = URL_s;
// leave pCompose window alive until completion routine
XL_TranslateText(g_NastyContextSavingHack, URL_s, &print);
#endif /* MOZ_NGLAYOUT */
return(TRUE);
}
extern "C" void FE_SecurityOptionsChanged(MWContext * pContext)
{
CGenericFrame * pFrame = wfe_FrameFromXPContext(pContext);
if ( pFrame ) {
CComposeFrame * pCompose = (CComposeFrame *) pFrame;
pCompose->UpdateSecurityOptions();
}
}

View File

@ -1,771 +0,0 @@
/* -*- 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.
*/
#include "stdafx.h"
#include "xp.h"
#include "forward.h"
#include "compfile.h"
#include "compfrm.h"
#include "compbar.h"
#include "ole2.h"
#include "abdefn.h"
#include "wfemsg.h"
#include "mailmisc.h"
#include "nsadrlst.h"
#include "addrfrm.h"
extern char* wfe_ConstructFilterString(int type);
extern char* XP_NetToDosFileName(const char * NetName);
#define BITMAP_WIDTH 16
#define BITMAP_HEIGHT 16
BEGIN_MESSAGE_MAP(CNSAttachmentList, CListBox)
ON_WM_CREATE()
ON_WM_KEYDOWN()
ON_WM_LBUTTONDOWN()
ON_WM_DROPFILES()
ON_WM_DESTROY()
ON_COMMAND(ID_EDIT_DELETE,OnDelete)
END_MESSAGE_MAP()
CNSAttachmentList::CNSAttachmentList(MSG_Pane * pPane)
{
m_pPane = pPane;
m_pDropTarget = NULL;
}
CNSAttachmentList::~CNSAttachmentList()
{
if (m_pDropTarget)
{
m_pDropTarget->Revoke();
delete m_pDropTarget;
}
}
BOOL CNSAttachmentList::Create(CWnd * pWnd, UINT id)
{
BOOL bRetVal = CListBox::Create (
WS_CLIPCHILDREN|WS_CHILD|WS_VISIBLE|WS_VSCROLL|LBS_OWNERDRAWFIXED|
LBS_HASSTRINGS|LBS_NOTIFY|LBS_WANTKEYBOARDINPUT|LBS_NOINTEGRALHEIGHT,
CRect(0,0,0,0), pWnd, id);
return bRetVal;
}
void CNSAttachmentList::OnDelete()
{
if (GetFocus() == this)
{
int idx = GetCurSel();
if (idx != LB_ERR)
{
DeleteString(idx);
CComposeBar * pComposeBar = (CComposeBar*)GetParent();
pComposeBar->UpdateAttachmentInfo(GetCount());
UpdateAttachments();
}
}
}
void CNSAttachmentList::OnUpdateDelete(CCmdUI * pCmdUI)
{
if (GetFocus() == this)
pCmdUI->Enable(GetCount()>0);
}
int CNSAttachmentList::OnCreate( LPCREATESTRUCT lpCreateStruct )
{
int iRet = CListBox::OnCreate(lpCreateStruct);
CComposeFrame * pFrame = (CComposeFrame*)GetParentFrame();
CDC * pdc = GetDC();
LOGFONT lf;
memset(&lf,0,sizeof(LOGFONT));
lf.lfPitchAndFamily = FF_SWISS;
if (INTL_DefaultWinCharSetID(0) == CS_LATIN1)
strcpy(lf.lfFaceName, "MS Sans Serif");
else
strcpy(lf.lfFaceName, IntlGetUIPropFaceName(0));
lf.lfCharSet = IntlGetLfCharset(pFrame->m_iCSID);
lf.lfHeight = -MulDiv(8,pdc->GetDeviceCaps(LOGPIXELSY), 72);
lf.lfQuality = PROOF_QUALITY;
m_cfTextFont = theApp.CreateAppFont( lf );
::SendMessage(GetSafeHwnd(), WM_SETFONT, (WPARAM)m_cfTextFont, FALSE);
ReleaseDC(pdc);
BOOL bDisableButtons = TRUE;
if(GetMsgPane())
{
const MSG_AttachmentData * pDataList = MSG_GetAttachmentList(GetMsgPane());
if(pDataList)
{
bDisableButtons = FALSE;
for (int i = 0; pDataList[i].url!=NULL; i++)
{
int idx;
MSG_AttachmentData * pEntry =
(MSG_AttachmentData*)XP_CALLOC(1,sizeof(MSG_AttachmentData));
ASSERT(pEntry);
pEntry->url = XP_STRDUP(pDataList[i].url);
if (pDataList[i].real_type)
pEntry->real_type = XP_STRDUP(pDataList[i].real_type);
if (pDataList[i].description)
pEntry->description = XP_STRDUP(pDataList[i].description);
if (pDataList[i].real_name)
pEntry->real_name = XP_STRDUP(pDataList[i].real_name);
if (pDataList[i].real_name)
idx = AddString (pEntry->real_name);
else
idx = AddString(pEntry->url);
#ifdef DEBUG_bienvenu
MSG_MessageLine msgLine;
int ret = MSG_GetMessageLineForURL(WFE_MSGGetMaster(), pEntry->url, &msgLine);
#endif
ASSERT(idx!=LB_ERR);
SetItemData(idx,(DWORD)pEntry);
ASSERT(pEntry->url);
if (pDataList[i].desired_type)
{
pEntry->desired_type = XP_STRDUP(pDataList[i].desired_type);
ASSERT(pEntry->desired_type);
}
}
SetCurSel(0);
}
}
if(!m_pDropTarget) {
m_pDropTarget = new CNSAttachDropTarget;
m_pDropTarget->Register(this);
}
DragAcceptFiles();
return(iRet);
}
void CNSAttachmentList::AttachUrl(char * pUrl)
{
CWnd * pFocusWnd = GetFocus();
CLocationDlg LocationDlg(pUrl,this);
if (LocationDlg.DoModal()==IDOK)
{
MSG_AttachmentData * pAttach =
(MSG_AttachmentData *)XP_CALLOC(1,sizeof(MSG_AttachmentData));
ASSERT(pAttach);
pAttach->url = XP_STRDUP(LocationDlg.m_Location);
ASSERT(pAttach->url);
int idx = AddString(pAttach->url);
ASSERT(idx!=LB_ERR);
SetItemData(idx,(DWORD)pAttach);
SetCurSel(idx);
CComposeBar * pComposeBar = (CComposeBar*)GetParent();
pComposeBar->UpdateAttachmentInfo(GetCount());
UpdateAttachments();
}
pFocusWnd->SetFocus();
}
void CNSAttachmentList::AddAttachment(char * pName)
{
if(pName)
{
MSG_AttachmentData * pAttach =
(MSG_AttachmentData *)XP_CALLOC(1,sizeof(MSG_AttachmentData));
CString cs;
WFE_ConvertFile2Url(cs,(const char *)pName);
pAttach->url = XP_STRDUP(cs);
ASSERT(pAttach->url);
int idx = AddString(pAttach->url);
CComposeBar * pComposeBar = (CComposeBar*)GetParent();
pComposeBar->UpdateAttachmentInfo(GetCount());
ASSERT(idx!=LB_ERR);
SetItemData(idx,(DWORD)pAttach);
SetCurSel(idx);
}
}
void CNSAttachmentList::AttachFile()
{
CWnd * pFocusWnd = GetFocus();
CString cs;
cs.LoadString(IDS_FILETOATTACH);
char * pName = GetAttachmentName( (char*)((const char *)cs), ALL, TRUE);
char * part = NULL;
char * filename = NULL;
char * full_path = NULL;
if (pName) {
// this assumes that there are space separators between filenames
// if the dialog getting the filenames changes to explorer style
// then this should change
if (part = strstr(pName, " ")) {
full_path = (char *) XP_ALLOC(_MAX_PATH * sizeof(char));
if(!full_path){
XP_FREEIF(pName);
return;
}
*part = NULL;
part++;
while (part) {
XP_STRCPY (full_path, "");
XP_STRCAT (full_path, pName);
if (*(full_path + strlen (full_path) - 1) != '\\')
XP_STRCAT (full_path, "\\");
filename = strstr(part, " ");
if (filename) {
*filename = NULL;
filename++;
}
XP_STRCAT (full_path, part);
AddAttachment(full_path);
part = filename;
}
XP_FREE(full_path);
}
else
AddAttachment(pName);
}
if (pName)
XP_FREE(pName);
pFocusWnd->SetFocus();
UpdateAttachments();
}
void CNSAttachmentList::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
switch (nChar)
{
case VK_INSERT:
AttachFile();
break;
case VK_DELETE:
RemoveAttachment();
break;
}
CListBox::OnKeyDown(nChar, nRepCnt, nFlags);
}
void CNSAttachmentList::RemoveAttachment()
{
int idx = GetCurSel();
if (idx != LB_ERR)
{
MSG_AttachmentData * pAttach =
(MSG_AttachmentData*)GetItemData(idx);
ASSERT(pAttach);
if (pAttach == NULL)
return;
XP_FREE(pAttach);
DeleteString(idx);
CComposeBar * pComposeBar = (CComposeBar*)GetParent();
pComposeBar->UpdateAttachmentInfo(GetCount());
if (idx >= GetCount())
SetCurSel(idx-1);
UpdateAttachments();
}
}
void CNSAttachmentList::Cleanup()
{
int iCount = GetCount();
for (int i = 0; i<iCount; i++) {
MSG_AttachmentData * pAttach =
(MSG_AttachmentData*)GetItemData(i);
if (pAttach != NULL)
{
if (pAttach->url)
XP_FREE((void*)pAttach->url);
if (pAttach->desired_type)
XP_FREE((void*)pAttach->desired_type);
if (pAttach->real_type)
XP_FREE((void*)pAttach->real_type);
if (pAttach->description)
XP_FREE((void*)pAttach->description);
if (pAttach->real_name)
XP_FREE((void*)pAttach->real_name);
}
SetItemData(i,NULL);
}
}
void CNSAttachmentList::UpdateAttachments()
{
int iCount = GetCount();
if (iCount != LB_ERR)
{
MSG_AttachmentData * pAttachList =
(MSG_AttachmentData *)XP_CALLOC(iCount+1,sizeof(MSG_AttachmentData));
if (!pAttachList)
return;
for (int i = 0; i<iCount; i++) {
MSG_AttachmentData * pAttach =
(MSG_AttachmentData*)GetItemData(i);
if (pAttach != NULL)
XP_MEMCPY(&pAttachList[i],pAttach,sizeof(MSG_AttachmentData));
}
ASSERT(GetMsgPane());
MSG_SetAttachmentList(GetMsgPane(),pAttachList);
XP_FREE(pAttachList);
}
}
char * CNSAttachmentList::GetAttachmentName(
char * prompt, int type, XP_Bool bMustExist, BOOL * pOpenIntoEditor)
{
OPENFILENAME fname;
char * full_path = NULL;
char name[_MAX_FNAME];
char* filter = wfe_ConstructFilterString(type);
/* initialize the OPENFILENAME struct */
BOOL result;
UINT index = (type == HTM_ONLY) ? 1 : type;
// space for the full path name
full_path = (char *) XP_ALLOC(_MAX_PATH * sizeof(char));
if(!full_path){
XP_FREE(filter);
return(NULL);
}
name[0] = '\0';
full_path[0] = '\0';
// set up the entries
fname.lStructSize = sizeof(OPENFILENAME);
fname.hwndOwner = m_hWnd;
fname.lpstrFilter = filter;
fname.lpstrCustomFilter = NULL;
fname.nFilterIndex = index;
fname.lpstrFile = full_path;
fname.nMaxFile = _MAX_PATH;
fname.lpstrFileTitle = name;
fname.nMaxFileTitle = _MAX_FNAME;
fname.lpstrInitialDir = NULL;
fname.lpstrTitle = prompt;
fname.Flags = OFN_HIDEREADONLY;
fname.lpstrDefExt = NULL;
if(bMustExist)
fname.Flags |= OFN_FILEMUSTEXIST;
if (!pOpenIntoEditor)
fname.Flags |= OFN_ALLOWMULTISELECT;
result = FEU_GetOpenFileName(&fname);
XP_FREE(filter);
// see if the user selects a file or hits cancel
if(result) {
return(full_path);
} else {
// user hit cancel
if(full_path) XP_FREE(full_path);
return(NULL);
}
}
UINT CNSAttachmentList::ItemFromPoint(CPoint pt, BOOL& bOutside) const
{
RECT rect;
GetClientRect(&rect);
int iHeight = GetItemHeight(0);
int iCount = GetCount();
int iTopIndex = GetTopIndex();
int iListHeight = iHeight * ( iCount - iTopIndex );
rect.bottom = rect.bottom < iListHeight ? rect.bottom : iListHeight;
bOutside = !::PtInRect(&rect, pt);
if ( bOutside ) {
return 0;
}
return (pt.y / iHeight) + iTopIndex;
}
//=============================================================== OnLButtonDown
void CNSAttachmentList::OnLButtonDown(UINT nFlags, CPoint point)
{
CListBox::OnLButtonDown(nFlags, point);
BOOL bOutside;
if (!GetCount())
{
AttachFile();
return;
}
int nNewSelect = ItemFromPoint( point, bOutside );
CRect rect;
GetItemRect(nNewSelect,rect);
if (((point.y+rect.Height())/rect.Height())+GetTopIndex()>GetCount())
{
AttachFile();
}
}
/////////////////////////////////////////////////////////////////////////////
// CLocationDlg dialog
CLocationDlg::CLocationDlg(char * pUrl, CWnd* pParent /*=NULL*/)
: CDialog(CLocationDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CLocationDlg)
m_Location = pUrl;
//}}AFX_DATA_INIT
}
void CLocationDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CLocationDlg)
DDX_Control(pDX, IDC_EDIT1, m_LocationBox);
DDX_Text(pDX, IDC_EDIT1, m_Location);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CLocationDlg, CDialog)
//{{AFX_MSG_MAP(CLocationDlg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CLocationDlg message handlers
BOOL CLocationDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
m_LocationBox.SetFocus();
m_LocationBox.SetSel(0,-1);
return FALSE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
BOOL wfe_GetBookmarkData( COleDataObject* pDataObject, char ** ppURL, char ** ppTitle );
BOOL CNSAttachmentList::ProcessDropTarget(COleDataObject * pDataObject)
{
HGLOBAL hString = NULL;
char * pString = NULL;
UINT clipFormat;
// Get any string data
if (pDataObject->IsDataAvailable(
::RegisterClipboardFormat(NETSCAPE_BOOKMARK_FORMAT)))
{
char * pURL = NULL, *pTitle = NULL;
wfe_GetBookmarkData(pDataObject, &pURL, &pTitle);
if (pURL)
{
if (!strnicmp(pURL,"addbook",7))
return FALSE;
if (!strnicmp(pURL,"mailto",6))
return FALSE;
AddAttachment(pURL);
UpdateAttachments();
}
return TRUE;
}
else if (pDataObject->IsDataAvailable(
clipFormat=::RegisterClipboardFormat(NETSCAPE_MESSAGE_FORMAT)))
{
HGLOBAL hContent = pDataObject->GetGlobalData (clipFormat);
MailNewsDragData *pDragData = (MailNewsDragData *) GlobalLock(hContent);
if (pDragData != NULL)
{
for (int i = 0; i< pDragData->m_count; i++)
{
ASSERT(pDragData->m_indices);
MessageKey key = MSG_GetMessageKey(pDragData->m_pane, pDragData->m_indices[i]);
URL_Struct* pUrl = MSG_ConstructUrlForMessage(pDragData->m_pane, key);
if (pUrl != NULL)
{
if (pUrl->address)
AddAttachment(pUrl->address);
NET_FreeURLStruct(pUrl);
}
}
UpdateAttachments();
}
return TRUE;
}
return FALSE;
}
void CNSAttachmentList::OnDropFiles( HDROP hDropInfo )
{
UINT wNumFilesDropped = ::DragQueryFile(hDropInfo,(UINT)-1,NULL,0);
if (wNumFilesDropped > 0)
{
for (UINT x = 0; x < wNumFilesDropped; x++)
{
int wPathnameSize = ::DragQueryFile(hDropInfo, x, NULL, 0);
char * pStr = (char*)XP_CALLOC(1,wPathnameSize+2);
ASSERT(pStr);
// Copy the pathname into the buffer & add to listbox
::DragQueryFile(hDropInfo, x, pStr, wPathnameSize+1);
AddAttachment(pStr);
XP_FREE(pStr);
}
UpdateAttachments();
}
}
void CNSAttachmentList::OnDestroy(void)
{
Cleanup();
CListBox::OnDestroy();
}
void CNSAttachmentList::DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct )
{
if (lpDrawItemStruct->itemID != -1)
{
CDC dc;
dc.Attach(lpDrawItemStruct->hDC);
HBRUSH hRegBrush = ::CreateSolidBrush( GetSysColor( COLOR_WINDOW ) );
HPEN hRegPen = ::CreatePen( PS_SOLID, 1, GetSysColor ( COLOR_WINDOW ) );
HBRUSH hHighBrush = ::CreateSolidBrush( GetSysColor( COLOR_HIGHLIGHT ) );
HPEN hHighPen = ::CreatePen( PS_SOLID, 1, GetSysColor ( COLOR_HIGHLIGHT ) );
HBRUSH hOldBrush = (HBRUSH) dc.SelectObject ( hRegBrush );
HPEN hOldPen = (HPEN) dc.SelectObject ( hRegPen );
COLORREF cOldText = dc.SetTextColor ( GetSysColor ( COLOR_WINDOWTEXT ) );
COLORREF cOldBk = dc.SetBkColor ( GetSysColor ( COLOR_WINDOW ) );
CRect rect(lpDrawItemStruct->rcItem);
BOOL bSelected = lpDrawItemStruct->itemState & ODS_SELECTED;
if (bSelected && (GetFocus()==this))
{
dc.SelectObject ( hHighBrush );
dc.SelectObject ( hHighPen );
dc.SetTextColor ( GetSysColor ( COLOR_HIGHLIGHTTEXT ) );
dc.SetBkColor ( GetSysColor ( COLOR_HIGHLIGHT ) );
}
dc.Rectangle(rect);
MSG_AttachmentData * pAttach = (MSG_AttachmentData *)lpDrawItemStruct->itemData;
if (pAttach)
{
char* pFilePath = NULL;
char * pszString =
(pAttach->real_name && strlen(pAttach->real_name)) ? pAttach->real_name : pAttach->url;
int idBitmap = 0;
if (!strnicmp(pAttach->url, "file:", strlen("file:")))
{
idBitmap = IDB_FILEATTACHMENT;
if (XP_STRCHR(pAttach->url, '#'))
{
char* pTemp = XP_STRCHR(pAttach->url, ':');
pFilePath = XP_NetToDosFileName(pTemp + 4); // remove :/// 4 bytes
}
else if (pszString == pAttach->url)
{
XP_ConvertUrlToLocalFile(pAttach->url, &pFilePath);
}
if (pFilePath)
{
char fname[_MAX_FNAME];
char ext[_MAX_EXT];
_splitpath(pFilePath, NULL, NULL, fname, ext);
*pFilePath = '\0';
strcat(pFilePath, fname);
strcat(pFilePath, ext);
pszString = pFilePath; // rhp - move this into the conditional - or crash in MAPI
}
// pszString = pFilePath;
}
else if (MSG_RequiresNewsWindow(pAttach->url))
idBitmap = IDB_NEWSARTICLE;
else if (MSG_RequiresMailWindow(pAttach->url))
idBitmap = IDB_MAILMESSAGE;
else if (MSG_RequiresBrowserWindow(pAttach->url))
idBitmap = IDB_WEBATTACHMENT;
else
idBitmap = IDB_WEBATTACHMENT;
rect.left += BITMAP_WIDTH + 4;
dc.DrawText(pszString,strlen(pszString),rect,DT_LEFT|DT_VCENTER);
rect.left -= BITMAP_WIDTH + 4;
if (pFilePath)
XP_FREE(pFilePath);
BITMAP bitmap;
CBitmap cbitmap;
cbitmap.LoadBitmap(MAKEINTRESOURCE(idBitmap));
cbitmap.GetObject(sizeof(BITMAP),&bitmap);
int center_x = 2;
int center_y = rect.top + (rect.Height()-bitmap.bmHeight)/2;
DrawTransparentBitmap(
dc.GetSafeHdc(),
(HBITMAP)cbitmap.GetSafeHandle(),
center_x, center_y,
RGB(255,0,255));
cbitmap.DeleteObject();
}
if (bSelected)
dc.DrawFocusRect(rect);
dc.SetTextColor ( cOldText );
dc.SetBkColor ( cOldBk );
dc.SelectObject ( hOldPen );
dc.SelectObject ( hOldBrush );
dc.Detach();
VERIFY(DeleteObject( hRegBrush ));
VERIFY(DeleteObject( hRegPen ));
VERIFY(DeleteObject( hHighBrush ));
VERIFY(DeleteObject( hHighPen ));
}
}
//=============================================================== MeasureItem
void CNSAttachmentList::MeasureItem( LPMEASUREITEMSTRUCT lpMeasureItemStruct )
{
lpMeasureItemStruct->itemHeight = BITMAP_HEIGHT + 2;
}
//================================================================ DeleteItem
void CNSAttachmentList::DeleteItem( LPDELETEITEMSTRUCT lpDeleteItemStruct )
{
}
//////////////////////////////////////////////////////////////////////////////
// CNSAttachDropTarget
DROPEFFECT CNSAttachDropTarget::OnDragEnter(CWnd *, COleDataObject *, DWORD, CPoint)
{
DROPEFFECT DropEffect = DROPEFFECT_NONE;
return(DropEffect);
}
DROPEFFECT CNSAttachDropTarget::OnDragOver(CWnd * pWnd,
COleDataObject * pDataObject, DWORD dwKeyState, CPoint point)
{
DROPEFFECT deReturn = DROPEFFECT_NONE;
// Only interested in bookmarks
if (pDataObject->IsDataAvailable(
::RegisterClipboardFormat(NETSCAPE_BOOKMARK_FORMAT)))
{
deReturn = DROPEFFECT_COPY;
}
else if (pDataObject->IsDataAvailable(
::RegisterClipboardFormat(NETSCAPE_MESSAGE_FORMAT)))
{
deReturn = DROPEFFECT_COPY;
}
else if(pDataObject->IsDataAvailable(
::RegisterClipboardFormat(vCardClipboardFormat)) )
{
deReturn = DROPEFFECT_COPY;
}
return(deReturn);
}
void CNSAttachDropTarget::OnDragLeave(CWnd *)
{
}
static LPSTR getDataObjectNewsURL(COleDataObject * pDataObject)
{
if (!pDataObject->IsDataAvailable(::RegisterClipboardFormat(NETSCAPE_BOOKMARK_FORMAT)))
return FALSE;
char * szURL = NULL;
char * szTitle = NULL;
wfe_GetBookmarkData(pDataObject, &szURL, &szTitle);
if((strnicmp(szURL, "news", 4) == 0) || (strnicmp(szURL, "snews", 5) == 0))
return szURL;
else
return NULL;
}
BOOL CNSAttachDropTarget::OnDrop(CWnd * pWnd, COleDataObject * pDataObject, DROPEFFECT effect, CPoint point)
{
CComposeFrame * pFrame = (CComposeFrame*)pWnd->GetParentFrame();
CComposeBar * pComposeBar = pFrame->GetComposeBar();
#ifdef MOZ_NEWADDR
if(pDataObject->IsDataAvailable(::RegisterClipboardFormat(ADDRESSBOOK_INDEX_FORMAT)))
{
pComposeBar->OnAddressTab();
pComposeBar->UpdateWindow();
pComposeBar->ProcessAddressBookIndexFormat(pDataObject,effect, point);
return TRUE;
}
else
#endif
if(pDataObject->IsDataAvailable(::RegisterClipboardFormat(vCardClipboardFormat)) )
{
pComposeBar->OnAddressTab();
pComposeBar->UpdateWindow();
return pComposeBar->ProcessVCardData(pDataObject,point);
}
else
{
// do not put news URLs to attachment
char * szURL = getDataObjectNewsURL(pDataObject);
if(szURL != NULL)
{
pComposeBar->OnAddressTab();
pComposeBar->UpdateWindow();
return pComposeBar->AddURLToAddressPane(pDataObject, point, szURL);
}
else
{
pComposeBar->OnAttachTab();
pComposeBar->UpdateWindow();
return pComposeBar->m_pAttachmentList->ProcessDropTarget(pDataObject);
}
}
}

View File

@ -1,101 +0,0 @@
/* -*- 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.
*/
#ifndef __COMPFILE_H
#define __COMPFILE_H
#include "msgcom.h"
#include "winproto.h"
class CNSAttachDropTarget;
class CNSAttachmentList : public CListBox
{
public:
HFONT m_cfTextFont;
CNSAttachmentList(MSG_Pane * pPane = NULL);
~CNSAttachmentList();
CNSAttachDropTarget * m_pDropTarget;
MSG_Pane * m_pPane;
MSG_Pane * GetMsgPane() { return m_pPane; }
void AttachFile();
void AttachUrl(char * pUrl = NULL);
void RemoveAttachment();
void UpdateAttachments();
char * GetAttachmentName(
char * prompt, int type = ALL, XP_Bool bMustExist = TRUE, BOOL * pOpenIntoEditor = NULL);
void Cleanup();
void AddAttachment(char * pName);
BOOL Create(CWnd * pWnd, UINT id);
BOOL ProcessDropTarget(COleDataObject * pDataObject);
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);
virtual void DeleteItem(LPDELETEITEMSTRUCT lpDeleteItemStruct);
afx_msg void OnDropFiles( HDROP hDropInfo );
protected:
UINT ItemFromPoint(CPoint pt, BOOL& bOutside) const;
afx_msg int OnCreate( LPCREATESTRUCT lpCreateStruct );
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) ;
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnDelete();
afx_msg void OnDestroy();
afx_msg void OnUpdateDelete(CCmdUI * pCmdUI);
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
// CLocationDlg dialog
class CLocationDlg : public CDialog
{
// Construction
public:
CLocationDlg(char * pUrl = NULL, CWnd* pParent = NULL); // standard constructor
char * m_pUrl;
// Dialog Data
//{{AFX_DATA(CLocationDlg)
enum { IDD = IDD_ATTACHLOCATION };
CEdit m_LocationBox;
CString m_Location;
//}}AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CLocationDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(CLocationDlg)
virtual BOOL OnInitDialog();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
#endif

File diff suppressed because it is too large Load Diff

View File

@ -1,250 +0,0 @@
/* -*- 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.
*/
/* COMPFRM.H - header file for the ComposeFrame class.
*/
#ifndef __COMPFRM_H
#define __COMPFRM_H
#include "msgcom.h"
#include "mainfrm.h"
#include "edframe.h"
#include "compmisc.h"
#include "apiaddr.h"
#include "statbar.h"
// Message used to synchronize setting the initial keyboard focus in the
// compose window. This message is posted to the compose window by
// FE_CreateCompositionPane just before returning.
#define WM_COMP_SET_INITIAL_FOCUS WM_TOOLCONTROLLER + 1
#define ID_ENCRYPTED 1011
#define ID_SIGNED 1012
// rhp - Flags for MAPI operations...
#define MAPI_IGNORE 0
#define MAPI_SEND 1
#define MAPI_SAVE 2
#define MAPI_QUITWHENDONE 3
// Forward declarations
class CNSAddressList; // address list widget
class CEditToolBarController; // HTML toolbar controlling object
class CComposeBar; // embedded address/attachment area
// CComposeFrame class declaration
class CComposeFrame : public CGenericFrame
{
DECLARE_DYNCREATE(CComposeFrame)
protected:
CComposeFrame(); // protected constructor used by dynamic creation
~CComposeFrame();
MSG_Pane *m_pComposePane; // Backend supplied pane context
CNetscapeStatusBar m_barStatus;
CComposeBar * m_pComposeBar; // address/attachment block widget
BOOL m_bUseHtml;
BOOL m_bInitialized;
CEditToolBarController * m_pToolBarController;
// these are used for plain text
CComposeEdit m_Editor; // regular text editor - to be replaced by Gold editor
int32 m_quoteSel; // current plain text qutoing position
CBlankWnd m_EditorParent; // controls resizing the edit control (going away when Gold integrated)
CWnd * m_pFocus; // field which has focus in control
HFONT m_cfTextFont; // font to use in the edit control
MSG_HEADER_SET m_SavedHeaders; // hackery to redraw headers once we become visible and
MWContext * m_pOldContext;
MSG_CompositionFields * m_pFields;
char *m_pInitialText; // initial text
BOOL m_bWrapLongLines;
int m_cxChar;
int m_bMAPISendMode; // rhp - for MAPI Send Operations
public:
// data access functions
inline int GetCharWidth() { return m_cxChar; }
inline BOOL GetWrapLongLines() { return m_bWrapLongLines; }
inline void SetComposeStuff(MWContext *pOld, MSG_CompositionFields * pFields)
{ m_pOldContext = pOld; m_pFields = pFields; }
inline BOOL UseHtml(void) { return m_bUseHtml; }
inline CWnd * GetFocusField(void) { return m_pFocus; }
inline void SetFocusField(CWnd * pwnd = NULL) { m_pFocus = pwnd; }
inline MSG_Pane * GetMsgPane(void) { return m_pComposePane; }
inline void SetToolBarController(CEditToolBarController * pController = NULL) {
m_pToolBarController = pController;
}
inline CEditToolBarController * GetToolBarController(void) {
return m_pToolBarController;
}
inline CComposeEdit * GetEditor(void) { return &m_Editor; }
inline int32 GetQuoteSel(void) { return m_quoteSel; }
inline void SetQuoteSel(int32 sel) { m_quoteSel = sel; }
inline CBlankWnd * GetEditorParent(void) { return &m_EditorParent; }
inline CComposeBar * GetComposeBar(void) { return m_pComposeBar; }
inline void SetComposeBar(CComposeBar *pBar = NULL) { m_pComposeBar = pBar; }
inline void SetSavedHeaders(MSG_HEADER_SET headers) { m_SavedHeaders = headers; }
inline MSG_HEADER_SET GetSavedHeaders(void) { return m_SavedHeaders; }
inline BOOL Initialized(void) { return m_bInitialized; }
LPADDRESSCONTROL GetAddressWidgetInterface();
// public interface
void SetQuoteSelection(void);
void SetMsgPane(MSG_Pane * pPane = NULL);
void SetModified(BOOL bvalue);
void CompleteComposeInitialization(void); // gold specific stuff
void GoldDoneLoading(void);
void InsertInitialText(void);
void SetInitialText(const char *pText);
inline const char *GetInitialText() { return m_pInitialText; };
virtual BOOL OnCmdMsg(UINT nID, int nCode, void* pExtra,
AFX_CMDHANDLERINFO* pHandlerInfo);
#ifdef XP_WIN32
virtual int16 GetTitleWinCSID(); // jliu
#endif
BOOL AppendAddress(MSG_HEADER_SET header, const char * value);
void SetType(MWContextType type);
void SetCSID(int16 iCSID);
void UpdateToolBar(void);
BOOL CreateEditBars();
void DisplayHeaders ( MSG_HEADER_SET );
CWnd * GetEditorWnd();
void UpdateAttachmentInfo(void);
void SetHtmlMode(BOOL bMode = FALSE);
void UpdateSecurityOptions(void);
BOOL BccOnly(void);
virtual void RefreshNewEncoding(int16 doc_csid, BOOL bSave = TRUE);
// rhp - For MAPI Operations!
inline void SetMAPISendMode(int bSendMode) { m_bMAPISendMode = bSendMode; }; // rhp - for MAPI
inline int GetMAPISendMode(void) { return m_bMAPISendMode; }; // rhp - for MAPI
void UpdateComposeWindowForMAPI(void); // rhp - for MAPISendMail()
// Overriden for setting the command help for editor plugin tools and edit history list
virtual void GetMessageString(UINT MenuID, CString& Message) const;
protected:
virtual BOOL PreTranslateMessage( MSG* pMsg );
virtual BOOL PreCreateWindow ( CREATESTRUCT & );
virtual BOOL OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext *pContext);
virtual BOOL CanCloseFrame(void);
void OnUpdateThis ( CCmdUI* pCmdUI, MSG_CommandType tMenuType );
void MessageCommand( MSG_CommandType );
void ConvertToPlainText();
void ConvertToHtml();
void DoSend( BOOL bNow = TRUE );
int CreateHtmlToolbars();
void CreatePlainTextEditor();
void ShowHtmlToolbars();
void DestroyHtmlToolbars();
void SetEditorParent(CWnd*);
char * PromptMessageSubject();
void MakeComposeBarVisible();
afx_msg void OnNew();
afx_msg void OnConvert();
afx_msg void OnAttachMyCard();
afx_msg void OnUpdateAttachMyCard(CCmdUI * pCmdUI);
afx_msg void OnUpdateConvert(CCmdUI*pCmdUI);
afx_msg void OnUpdateButtonGeneral(CCmdUI* pCmdUI);
afx_msg LONG OnToolController(UINT,LONG);
afx_msg void OnPasteQuote( void );
afx_msg void OnUpdatePasteQuote(CCmdUI *);
afx_msg void OnSelectAll(void);
afx_msg void OnUpdateSelectAll(CCmdUI *);
afx_msg void OnButtonTo(void);
afx_msg void OnQuoteOriginal ( void );
afx_msg void OnSaveAs( void );
afx_msg void OnSaveDraft(void);
afx_msg void OnSaveTemplate(void);
afx_msg void OnAttachFile(void);
afx_msg void OnCheckSpelling(void);
afx_msg void OnUpdateCheckSpelling(CCmdUI * pCmdUI);
afx_msg void OnDoneGoingOffline(void);
afx_msg void OnUpdateSaveDraft( CCmdUI * pCmdUI );
afx_msg void OnUpdateSaveTemplate( CCmdUI * pCmdUI );
afx_msg void OnSend(void);
afx_msg void OnSendNow(void);
afx_msg void OnSendLater(void);
afx_msg void OnUpdateSend(CCmdUI * pCmdUI);
afx_msg void OnUpdateSendNow(CCmdUI * pCmdUI);
afx_msg void OnUpdateSendLater(CCmdUI * pCmdUI);
afx_msg void OnUpdateAttach ( CCmdUI * pCmdUI );
afx_msg void OnShowSecurityAdvisor ();
afx_msg void OnSetFocus(CWnd *);
afx_msg int OnCreate ( LPCREATESTRUCT );
afx_msg void OnClose ( void );
afx_msg void OnDestroy(void);
afx_msg void OnAttachUrl(void);
afx_msg void OnSelectAddresses(void);
afx_msg void OnWrapLongLines(void);
afx_msg void OnUpdateWrapLongLines(CCmdUI*pCmdUI);
afx_msg void OnViewAddresses();
afx_msg void OnViewAttachments();
afx_msg void OnViewOptions();
afx_msg void OnUpdateViewAddresses(CCmdUI * pCmdUI);
afx_msg void OnUpdateViewAttachments(CCmdUI * pCmdUI);
afx_msg void OnUpdateViewOptions(CCmdUI * pCmdUI);
afx_msg void OnToggleMessageToolbar();
afx_msg void OnUpdateToggleMessageToolbar(CCmdUI *pCmdUI);
afx_msg void OnToggleAddressArea();
afx_msg void OnUpdateToggleAddressArea(CCmdUI * pCmdUI);
afx_msg void OnSecurity();
afx_msg void OnAttachTab(void);
afx_msg void OnAddressTab(void);
afx_msg void OnOptionsTab(void);
afx_msg void OnCollapse(void);
afx_msg void OnUpdateSecurity(CCmdUI *pCmdUI);
afx_msg void OnUpdateSecureStatus(CCmdUI *pCmdUI);
afx_msg void OnUpdateToggleNameCompletion(CCmdUI *pCmdUI);
afx_msg void OnToggleNameCompletion();
afx_msg void OnUpdateShowNamePicker(CCmdUI *pCmdUI);
afx_msg void OnShowNamePicker();
afx_msg LONG OnSetInitialFocus(WPARAM wParam, LPARAM lParam);
LRESULT OnButtonMenuOpen(WPARAM wParam, LPARAM lParam);
afx_msg void OnUpdateEncoding(CCmdUI* pCmdUI);
afx_msg LRESULT OnFindReplace(WPARAM wParam, LPARAM lParam) ;
afx_msg LRESULT OnSetMessageString(WPARAM wParam, LPARAM lParam);
afx_msg LONG OnProcessMAPIMessage(WPARAM wParam, LPARAM lParam); // rhp: for MAPI
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
#endif

View File

@ -1,136 +0,0 @@
/* -*- 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.
*/
/* COMPFRM.CPP - Compose Window Frame. This module contains code for the
* compose window frame class. Handles all menu and tool commands.
*
*/
#include "stdafx.h"
#include "edt.h"
#include "compbar.h"
#include "compfrm.h"
#include "prefapi.h"
#include "addrdlg.h"
#include "intl_csi.h"
extern "C" {
#include "xpgetstr.h"
extern int MK_MSG_SAVE_AS;
extern int MK_MSG_CANT_OPEN;
extern int MK_MSG_MISSING_SUBJECT;
};
#ifdef XP_WIN32
#include "postal.h"
#endif
#include "netsvw.h"
void CComposeFrame::SetEditorParent(CWnd * pWnd)
{
CWinCX * pWinCX = (CWinCX*)GetMainContext();
// after the window is created, tell the browser view to resize the
// parent which resizes the editor.
if (pWinCX)
{
CNetscapeView * pView = (CNetscapeView*)pWinCX->GetView();
if (pView)
pView->SetChild (pWnd);
}
}
void CComposeFrame::SetHtmlMode(BOOL bMode)
{
m_bUseHtml = bMode;
}
void CComposeFrame::SetQuoteSelection(void)
{
int32 eReplyOnTop = 0;
if (PREF_NOERROR == PREF_GetIntPref("mailnews.reply_on_top", &eReplyOnTop) &&
eReplyOnTop != 0) {
// call backend with insertion call-back
if (UseHtml())
{
int32 offset = EDT_GetInsertPointOffset( GetMainContext()->GetContext() );
SetQuoteSel(offset);
}
else
{
int tmpStartSel, tmpEndSel;
GetEditor()->GetSel(tmpStartSel, tmpEndSel);
// we only care about start position
SetQuoteSel((int32) tmpStartSel);
}
}
}
CWnd * CComposeFrame::GetEditorWnd(void)
{
if (m_bUseHtml)
{
CWinCX * pWinCX = (CWinCX*)GetMainContext();
HWND hwnd = pWinCX->GetPane();
return CWnd::FromHandle(hwnd);
}
return (CWnd *)&m_Editor;
}
void CComposeFrame::UpdateAttachmentInfo(void)
{
ASSERT(m_pComposeBar);
m_pComposeBar->UpdateAttachmentInfo(MSG_GetAttachmentList(GetMsgPane()) ? 1 : 0);
}
BOOL CComposeFrame::PreTranslateMessage( MSG* pMsg )
{
if (pMsg->message == WM_KEYDOWN)
{
if (pMsg->wParam == VK_TAB)
{
BOOL bControl = GetKeyState(VK_CONTROL) & 0x8000;
BOOL bShift = GetKeyState(VK_SHIFT) & 0x8000;
CWnd * pWnd = CWnd::FromHandle(pMsg->hwnd);
if (GetComposeBar()->TabControl(bShift, bControl, pWnd))
return TRUE;
}
}
else if (pMsg->message == WM_COMMAND)
{
int ID = (int)LOWORD(pMsg->wParam);
if (ID == ID_CHECK_SPELLING)
{
OnCheckSpelling();
return TRUE;
}
}
return CGenericFrame::PreTranslateMessage(pMsg);
}
void CComposeFrame::OnSelectAddresses()
{
CAddrDialog AddressDialog(this);
GetComposeBar()->OnAddressTab();
GetComposeBar()->UpdateWindow();
CWnd * pWnd = GetFocus();
AddressDialog.DoModal();
pWnd->SetFocus();
}

View File

@ -1,256 +0,0 @@
/* -*- 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.
*/
#include "stdafx.h"
#include "allxpstr.h"
#include "xpgetstr.h"
typedef struct {
char * pszTo;
char * pszSubject;
char * pszOrganization;
} MAPI_HEADER_INFO;
static MAPI_HEADER_INFO _temp;
#ifdef XP_WIN32
extern "C" int FE_LoadExchangeInfo(
MWContext * context,
char * pszTo, char * pszCc, char * pszBcc,
char * pszOrganization,
char * pszNewsgroups,
char * pszSubject);
#endif
#define MAX_MAIL_SIZE 300000
extern "C" void FE_DoneMailTo(PrintSetup * print)
{
ASSERT(print);
MWContext * context = (MWContext *) print->carg;
CGenericFrame * pFrame = wfe_FrameFromXPContext(context);
ASSERT(pFrame);
fclose(print->out);
char * buffer;
buffer = (char *) malloc(MAX_MAIL_SIZE + 5);
FILE * fp = fopen(print->filename, "r");
int len = fread(buffer, 1, MAX_MAIL_SIZE + 5, fp);
buffer[len] = '\0';
fclose(fp);
if(theApp.m_hPostalLib) {
if(theApp.m_bInitMapi) {
if(theApp.m_fnOpenMailSession) {
POSTCODE status = (*theApp.m_fnOpenMailSession) (NULL, NULL);
if(status == POST_OK) {
theApp.m_bInitMapi = FALSE;
}
}
}
// create mail window with no quoting
if(theApp.m_fnComposeMailMessage)
(*theApp.m_fnComposeMailMessage) ((const char *) _temp.pszTo,
(const char *) "", /* no refs field. BAD! BUG! */
(const char *) _temp.pszOrganization,
(const char *) "", /* no URL */
(const char *) _temp.pszSubject,
buffer,
(const char *) "",
(const char *) "");
if (strlen(_temp.pszTo))
free(_temp.pszTo);
if (strlen(_temp.pszSubject))
free(_temp.pszSubject);
if (strlen(_temp.pszOrganization))
free(_temp.pszOrganization);
// get rid of the file and free the memory
remove(print->filename);
// XP_FREE(print->filename);
// print->filename = NULL;
XP_FREE(buffer);
return;
}
}
extern "C" int FE_LoadExchangeInfo(
MWContext * context,
char * pszTo, char * pszCc, char * pszBcc,
char * pszOrganization,
char * pszNewsgroups,
char * pszSubject)
{
#ifdef MOZ_NGLAYOUT
XP_ASSERT(0);
#else
_temp.pszTo = _temp.pszSubject = _temp.pszOrganization = "";
if(!context)
return(FALSE);
if(!theApp.m_hPostalLib)
return(FALSE);
History_entry * hist_ent = NULL;
if(context)
hist_ent = SHIST_GetCurrent(&(context->hist));
CString csURL;
if(hist_ent)
csURL = hist_ent->address;
else
csURL = "";
if (!pszSubject || !strlen(pszSubject))
pszSubject = (char *)(const char *)csURL;
//Set hist_ent to NULL if context->title is "Message Composition"
//This is a nasty way of determining if we're in here in response
//to "Mail Doc" or "New Mail Message".
//Also, if there's To: field info present(pBar->m_pszTo) then
//we know that it's a Mailto: and set hist_ent to NULL
//Without this differentiation the code always sends the contents
//of the previously mailed document even when someone chooses
//"New Mail Message" or "Mailto:"
if(!strcmp(XP_GetString(MK_MSG_MSG_COMPOSITION), context->title) || strlen(pszTo) )
hist_ent = NULL;
// make sure there was a document loaded
if(!hist_ent) {
if(theApp.m_bInitMapi) {
if(theApp.m_fnOpenMailSession) {
POSTCODE status = (*theApp.m_fnOpenMailSession) (NULL, NULL);
if(status == POST_OK) {
theApp.m_bInitMapi = FALSE;
}
else {
return(FALSE);
}
}
}
// create mail window with no quoting
if(theApp.m_fnComposeMailMessage)
(*theApp.m_fnComposeMailMessage) (
(const char *)pszTo,
(const char *) "", /* no refs field. BAD! BUG! */
(const char *)pszOrganization,
(const char *) "", /* no URL */
(const char *)pszSubject,
"",
(const char *)pszCc,
(const char *)pszBcc);
return(TRUE);
}
URL_Struct * URL_s = SHIST_CreateURLStructFromHistoryEntry(context, hist_ent);
// Zero out the saved data
memset(&URL_s->savedData, 0, sizeof(URL_s->savedData));
PrintSetup print;
XL_InitializeTextSetup(&print);
print.width = 68;
print.prefix = "";
print.eol = "\r\n";
char * name = WH_TempName(xpTemporary, NULL);
if(!name) {
return(FALSE);
}
print.out = fopen(name, "w");
print.completion = (XL_CompletionRoutine) FE_DoneMailTo;
print.carg = context;
print.filename = name;
print.url = URL_s;
if (pszSubject && strlen(pszSubject))
_temp.pszSubject = strdup(pszSubject);
if (pszTo && strlen(pszTo))
_temp.pszTo = strdup(pszTo);
if (pszOrganization && strlen(pszOrganization))
_temp.pszOrganization = strdup(pszOrganization);
// leave pCompose window alive until completion routine
XL_TranslateText(context, URL_s, &print);
#endif /* MOZ_NGLAYOUT */
return(TRUE);
}
void InitializeMapi(void)
{
}
extern "C" void DoAltMailComposition(MWContext *pContext)
{
if ( pContext )
{
FE_LoadExchangeInfo(
pContext,
"",
"",
"",
(char *)FE_UsersOrganization(),
"",
"");
}
}
extern "C" void FE_AlternateCompose(
char * from, char * reply_to, char * to, char * cc, char * bcc,
char * fcc, char * newsgroups, char * followup_to,
char * organization, char * subject, char * references,
char * other_random_headers, char * priority,
char * attachment, char * newspost_url, char * body)
{
if(theApp.m_bInitMapi) {
if(theApp.m_fnOpenMailSession) {
POSTCODE status = (*theApp.m_fnOpenMailSession) (NULL, NULL);
if(status == POST_OK) {
theApp.m_bInitMapi = FALSE;
}
else
return;
}
}
// create mail window with no quoting
if(theApp.m_fnComposeMailMessage)
(*theApp.m_fnComposeMailMessage) (
(const char *)to,
(const char *)references,
(const char *)(organization ? organization : FE_UsersOrganization()),
(const char *)"",
(const char *)subject,
(const char *)body,
(const char *)cc,
(const char *)bcc );
}

View File

@ -1,557 +0,0 @@
/* -*- 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.
*/
/* COMPMISC.CPP - Contains controls which are utilized in the compose
* window address/attachment block. Also contains the resizer control
* which resizes the text edit control
*/
#include "stdafx.h"
#include "compmisc.h"
#include "compfrm.h"
#include "compbar.h"
#include "findrepl.h"
#include "spellcli.h" // spell checker client
#include "prefapi.h"
#ifdef XP_WIN32
#define EDIT_CONTROL_BUFFER_SIZE UINT_MAX
#else
#define EDIT_CONTROL_BUFFER_SIZE ((UINT)(32*1024))
#endif
/////////////////////////////////////////////////////////////////////////////
// CBlankWnd - resizes the edit control and restores focus to the appropriate
// field.
BEGIN_MESSAGE_MAP(CBlankWnd,CWnd)
ON_EN_CHANGE(IDC_COMPOSEEDITOR,OnChange)
ON_WM_ERASEBKGND()
ON_WM_SIZE()
ON_WM_SETFOCUS()
ON_WM_PAINT()
ON_WM_CREATE()
ON_WM_DESTROY()
END_MESSAGE_MAP()
#define INDICATOR_WIDTH 5
#define INDICATOR_COLOR RGB(113,113,255)
PR_CALLBACK PrefSetWrapCol(const char *pPref, void *pData)
{
int32 iCol;
PREF_GetIntPref("mailnews.wraplength", &iCol);
CBlankWnd * pEditorWindow = (CBlankWnd *)pData;
pEditorWindow->SetWrapCol(iCol);
pEditorWindow->Invalidate(TRUE);// must pass TRUE
}
int CBlankWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CWnd::OnCreate(lpCreateStruct) == -1)
return -1;
m_lWrapCol = 0L;
//register call back for wrap long line
PREF_RegisterCallback("mailnews.wraplength", PrefSetWrapCol, (void *)this);
PREF_GetIntPref("mailnews.wraplength",&m_lWrapCol);
return 0;
}
void CBlankWnd::OnDestroy()
{
PREF_UnregisterCallback("mailnews.wraplength", PrefSetWrapCol, this);
CWnd::OnDestroy();
}
void CBlankWnd::OnPaint()
{
CPaintDC dc(this);
CComposeFrame * pFrame = (CComposeFrame*)GetParentFrame();
if (pFrame->GetWrapLongLines())
{
CRect rect;
GetClientRect(rect);
int iPos = ((int)GetWrapCol()) * pFrame->GetCharWidth();
if (iPos < rect.Width())
{
CPen pen(PS_SOLID,1,INDICATOR_COLOR);
CPen * pOldPen = dc.SelectObject(&pen);
iPos -= (INDICATOR_WIDTH/2);
dc.MoveTo(iPos,1);
dc.LineTo(iPos+INDICATOR_WIDTH,1);
dc.MoveTo(iPos+1,2);
dc.LineTo((iPos+INDICATOR_WIDTH)-1,2);
dc.SetPixel(iPos+2,3,INDICATOR_COLOR);
dc.SelectObject(pOldPen);
}
}
}
void CBlankWnd::OnSetFocus(CWnd *)
{
// when focus is given to this window... focus is passed off to the
// last field which had focus.
CComposeFrame * pFrame = (CComposeFrame*)GetParentFrame();
if (pFrame->GetFocusField() && IsWindow(pFrame->GetFocusField()->m_hWnd))
pFrame->GetFocusField()->SetFocus();
}
void CBlankWnd::OnChange(void)
{
// the backend should be notified that the text has been
// changed whener an edit occurs
CComposeFrame * pFrame = (CComposeFrame*)GetParentFrame();
m_bModified = TRUE;
}
BOOL CBlankWnd::OnEraseBkgnd (CDC * pdc)
{
// erase the background with the default brush
CRect rect;
CBrush Brush(GetSysColor(COLOR_WINDOW));
GetClientRect (&rect);
pdc->FillRect (rect, &Brush);
return TRUE;
}
void CBlankWnd::OnSize ( UINT nType, int cx, int cy )
{
// resize the editor whenver this window is resized.
// a border is given on the left so that the cursor doesn't
// but right up against the edge (looks bad)
CWnd::OnSize ( nType, cx, cy );
CRect rect ( EDIT_MARGIN_OFFSET, EDIT_TOP_MARGIN, cx, cy );
CComposeFrame * pFrame = (CComposeFrame*)GetParent()->GetParent();
if (IsWindow(pFrame->GetEditor()->m_hWnd))
pFrame->GetEditor()->MoveWindow ( rect );
}
/////////////////////////////////////////////////////////////////////////////
// CComposeEdit - This is the regular text edit control. This is probably
//
BEGIN_MESSAGE_MAP(CComposeEdit, CGenericEdit)
ON_WM_KEYDOWN()
ON_WM_CREATE()
ON_WM_SETFOCUS()
ON_COMMAND(ID_CHECK_SPELLING, OnCheckSpelling)
// edit menu
ON_COMMAND(ID_EDIT_CUT,OnCut)
ON_COMMAND(ID_EDIT_COPY,OnCopy)
ON_COMMAND(ID_EDIT_PASTE,OnPaste)
ON_COMMAND(ID_EDIT_UNDO,OnUndo)
ON_COMMAND(idm_redo,OnRedo)
ON_COMMAND(ID_EDIT_DELETE,OnDelete)
ON_COMMAND(IDM_SELECTALL,OnSelectAll)
ON_COMMAND(IDM_FINDAGAIN,OnFindAgain)
ON_COMMAND(IDM_FINDINMESSAGE,OnFindInMessage)
ON_REGISTERED_MESSAGE(WM_FINDREPLACE, OnFindReplace)
ON_UPDATE_COMMAND_UI(ID_EDIT_CUT,OnUpdateCut)
ON_UPDATE_COMMAND_UI(ID_EDIT_COPY,OnUpdateCopy)
ON_UPDATE_COMMAND_UI(ID_EDIT_PASTE,OnUpdatePaste)
ON_UPDATE_COMMAND_UI(IDM_PASTEASQUOTE,OnUpdatePasteAsQuote)
ON_UPDATE_COMMAND_UI(ID_EDIT_UNDO,OnUpdateUndo)
ON_UPDATE_COMMAND_UI(ID_EDIT_DELETE,OnUpdateDelete)
ON_UPDATE_COMMAND_UI(IDM_SELECTALL,OnUpdateSelectAll)
ON_UPDATE_COMMAND_UI(IDM_FINDINMESSAGE,OnUpdateFindInMessage)
ON_UPDATE_COMMAND_UI(IDM_FINDAGAIN,OnUpdateFindAgain)
END_MESSAGE_MAP()
CComposeEdit::CComposeEdit(CComposeFrame * pFrame)
{
m_pComposeFrame = pFrame;
m_cxChar = 1;
#ifdef XP_WIN16
// win16 edit control's memory is by default, allocated from the heap.. which is
// usually not enough.... so create a 32K message buffer
m_hTextElementSegment = GlobalAlloc(GMEM_DDESHARE | GMEM_MOVEABLE, EDIT_CONTROL_BUFFER_SIZE);
#endif
}
CComposeEdit::~CComposeEdit()
{
#ifdef XP_WIN16
// free up the 16bit memory buffer
if (m_hTextElementSegment)
GlobalFree(m_hTextElementSegment);
#endif
}
#ifdef XP_WIN16
//
// The creator of this form element should have created a segment for
// us to live in before we got here. Tell Windows to use that
// segment rather than the application's so that we don't run out of
// DGROUP space
//
BOOL CComposeEdit::PreCreateWindow( CREATESTRUCT& cs )
{
// during a precreate in happy 16bit land, lock the edit data
// buffer and tell the control to use it.
if (CGenericEdit::PreCreateWindow(cs)) {
ASSERT(m_hTextElementSegment);
if(!m_hTextElementSegment)
return TRUE;
LPVOID lpEditDC = (LPVOID) GlobalLock(m_hTextElementSegment);
if (lpEditDC) {
UINT uSegment = HIWORD((LONG) lpEditDC);
if (LocalInit((UINT)uSegment,0,(WORD)(GlobalSize(m_hTextElementSegment)-16))) {
cs.hInstance = (HINSTANCE) uSegment;
UnlockSegment(uSegment);
}
else
GlobalUnlock(m_hTextElementSegment);
}
return TRUE;
}
return FALSE;
}
#endif
void CComposeEdit::OnSetFocus(CWnd * pWnd)
{
// When focus is set to the edit field, tell the parent
CGenericEdit::OnSetFocus(pWnd);
CComposeFrame * pFrame = (CComposeFrame*)GetParentFrame();
pFrame->SetFocusField(this);
}
int CComposeEdit::OnCreate ( LPCREATESTRUCT lpcs )
{
// set up the fonts, get the character size
int iRet = CGenericEdit::OnCreate ( lpcs );
LimitText(EDIT_CONTROL_BUFFER_SIZE);
CClientDC dc ( this );
LOGFONT lf;
XP_MEMSET(&lf,0,sizeof(LOGFONT));
CComposeFrame * pFrame = (CComposeFrame*)GetParentFrame();
lf.lfPitchAndFamily = FF_MODERN | FIXED_PITCH;
strcpy(lf.lfFaceName, IntlGetUIFixFaceName(pFrame->m_iCSID));
lf.lfCharSet = IntlGetLfCharset(pFrame->m_iCSID);
lf.lfHeight = -MulDiv(9,dc.GetDeviceCaps(LOGPIXELSY), 72);
lf.lfQuality = PROOF_QUALITY;
if (m_cfRegFont) {
theApp.ReleaseAppFont(m_cfRegFont);
}
m_cfRegFont = theApp.CreateAppFont( lf );
TEXTMETRIC tm;
CFont * pOldFont = dc.SelectObject(CFont::FromHandle(m_cfRegFont));
dc.GetTextMetrics(&tm);
dc.SelectObject(pOldFont);
m_cxChar = tm.tmAveCharWidth;
::SendMessage(GetSafeHwnd(), WM_SETFONT, (WPARAM)m_cfRegFont, FALSE);
return iRet;
}
void CComposeEdit::OnKeyDown( UINT nChar, UINT nRepCnt, UINT nFlags )
{
// process the tab key so that it properly tabs between the
// address block and the editor.
if ((nChar==VK_TAB)&&(GetKeyState(VK_SHIFT)&0x8000)) {
CComposeFrame * pFrame = (CComposeFrame*)GetParentFrame();
MSG msg;
while (PeekMessage(&msg,m_hWnd,WM_KEYFIRST,WM_KEYLAST,PM_REMOVE))
;
CComposeBar * pBar = pFrame->GetComposeBar();
ASSERT(pBar);
if (pBar)
pBar->m_pSubjectEdit->SetFocus();
}
else
{
CGenericEdit::OnKeyDown(nChar,nRepCnt,nFlags);
}
}
void CComposeEdit::OnCheckSpelling()
{
CPlainTextSpellChecker SpellChecker(this);
if (SpellChecker.ProcessDocument() != 0)
ASSERT(FALSE);
}
void CComposeEdit::OnCut()
{
Cut();
}
void CComposeEdit::OnCopy()
{
Copy();
}
void CComposeEdit::OnPaste()
{
Paste();
}
void CComposeEdit::OnUndo()
{
Undo();
}
void CComposeEdit::OnRedo()
{
}
void CComposeEdit::OnDelete()
{
if (GetFocus() == this)
Clear();
}
void CComposeEdit::OnFindInMessage()
{
CNetscapeFindReplaceDialog *dlg;
dlg = new CNetscapeFindReplaceDialog();
dlg->Create(TRUE,
theApp.m_csFindString,
NULL,
FR_DOWN | FR_NOWHOLEWORD | FR_HIDEWHOLEWORD | FR_NOUPDOWN,
GetParentFrame());
}
void CComposeEdit::OnFindAgain()
{
FindText();
}
void CComposeEdit::OnUpdateCut(CCmdUI * pCmdUI)
{
if (GetFocus() == this)
pCmdUI->Enable(IsSelection());
}
void CComposeEdit::OnUpdateCopy(CCmdUI * pCmdUI)
{
if (GetFocus() == this)
pCmdUI->Enable(IsSelection());
}
void CComposeEdit::OnUpdatePaste(CCmdUI * pCmdUI)
{
if (GetFocus() == this)
pCmdUI->Enable(IsClipboardData());
}
BOOL CComposeEdit::IsSelection()
{
int nStart, nEnd;
GetSel(nStart,nEnd);
return ((nEnd-nStart)>0);
}
BOOL CComposeEdit::IsClipboardData()
{
BOOL retVal = FALSE;
OpenClipboard();
if (GetClipboardData(CF_TEXT)) {
retVal = TRUE;
}
CloseClipboard();
return retVal;
}
void CComposeEdit::OnUpdatePasteAsQuote(CCmdUI * pCmdUI)
{
if (GetFocus() == this)
pCmdUI->Enable(IsClipboardData());
}
void CComposeEdit::OnUpdateUndo(CCmdUI * pCmdUI)
{
if (GetFocus() == this)
pCmdUI->Enable(CanUndo());
}
void CComposeEdit::OnUpdateDelete(CCmdUI * pCmdUI)
{
if (GetFocus() == this)
pCmdUI->Enable(IsSelection());
}
void CComposeEdit::OnUpdateFindInMessage(CCmdUI * pCmdUI)
{
if ( GetWindowTextLength() > 0 && (GetFocus() == this))
pCmdUI->Enable(TRUE);
else
pCmdUI->Enable(FALSE);
}
void CComposeEdit::OnUpdateFindAgain(CCmdUI * pCmdUI)
{
if ((theApp.m_csFindString && strlen(theApp.m_csFindString)) && (GetFocus() == this))
pCmdUI->Enable(TRUE);
else
pCmdUI->Enable(FALSE);
}
void CComposeEdit::OnSelectAll()
{
SetSel(0,-1);
SetFocus();
}
void CComposeEdit::OnUpdateSelectAll(CCmdUI *pCmdUI)
{
pCmdUI->Enable(TRUE);
}
BEGIN_MESSAGE_MAP(CComposeSubjectEdit, CGenericEdit)
ON_WM_SETFOCUS()
ON_WM_KILLFOCUS()
END_MESSAGE_MAP()
void CComposeSubjectEdit::OnSetFocus(CWnd * pWnd)
{
// When focus is set to the edit field, tell the parent
CGenericEdit::OnSetFocus(pWnd);
CComposeFrame * pFrame = (CComposeFrame*)GetParentFrame();
pFrame->SetFocusField(this);
}
void CComposeSubjectEdit::OnKillFocus(CWnd * pWnd)
{
CGenericEdit::OnKillFocus(pWnd);
CComposeFrame * pFrame = (CComposeFrame*)GetParentFrame();
CString cs;
GetWindowText(cs);
if (cs.GetLength())
pFrame->GetChrome()->SetDocumentTitle(cs);
}
BOOL CComposeSubjectEdit::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_KEYDOWN)
{
if (pMsg->wParam == VK_RETURN)
{
CComposeFrame * pFrame = (CComposeFrame*)GetParentFrame();
pFrame->GetComposeBar()->TabControl(FALSE,FALSE,this);
return TRUE;
}
if (pMsg->wParam == 'v' || pMsg->wParam == 'V')
{
if (GetKeyState(VK_CONTROL)&0x8000)
{
Paste();
return TRUE;
}
}
else if (pMsg->wParam == VK_INSERT)
{
if (GetKeyState(VK_SHIFT)&0x8000)
{
Paste();
return TRUE;
}
else if (GetKeyState(VK_CONTROL)&0x8000)
{
Copy();
return TRUE;
}
}
else if (pMsg->wParam == 'x' || pMsg->wParam == 'X')
{
if (GetKeyState(VK_CONTROL)&0x8000)
{
Cut();
return TRUE;
}
}
else if (pMsg->wParam == 'c' || pMsg->wParam == 'C')
{
if (GetKeyState(VK_CONTROL)&0x8000)
{
Copy();
return TRUE;
}
}
}
return CEdit::PreTranslateMessage(pMsg);
}
LRESULT CComposeEdit::OnFindReplace(WPARAM wParam, LPARAM lParam)
{
CFindReplaceDialog * dlg = ::CFindReplaceDialog::GetNotifier(lParam);
if (!dlg)
return NULL;
FINDREPLACE findstruct = dlg->m_fr;
if (dlg->IsTerminating()) {
return NULL;
}
// Something wrong or user cancelled dialog box
if(!(findstruct.Flags & FR_FINDNEXT))
return NULL;
// remember this string for next time
theApp.m_csFindString = findstruct.lpstrFindWhat;
theApp.m_csReplaceString = findstruct.lpstrReplaceWith;
theApp.m_bMatchCase = dlg->MatchCase();
theApp.m_bSearchDown = dlg->SearchDown();
return (LRESULT) FindText();
}
BOOL CComposeEdit::FindText()
{
CString cs, csSearch = theApp.m_csFindString;
GetWindowText(cs);
int nStart, nEnd;
GetSel(nStart,nEnd);
if (!theApp.m_bMatchCase)
{
cs.MakeLower();
csSearch.MakeLower();
}
if (!cs.IsEmpty())
{
int ipos = nEnd;
int ipos2;
LPCSTR lpcstr = cs;
if ((ipos2 = CString(&lpcstr[ipos]).Find(csSearch)) != -1)
{
SetSel(ipos + ipos2, ipos + ipos2 + strlen(csSearch));
return(TRUE);
}
}
return FALSE;
}

View File

@ -1,118 +0,0 @@
/* -*- 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.
*/
#ifndef __COMPMISC_H
#define __COMPMISC_H
#include "compstd.h"
#include "mainfrm.h"
#include "edframe.h"
class CComposeSubjectEdit : public CGenericEdit {
public:
virtual BOOL PreTranslateMessage(MSG* pMsg);
protected:
afx_msg void OnSetFocus(CWnd * pWnd);
afx_msg void OnKillFocus(CWnd*);
DECLARE_MESSAGE_MAP();
};
class CBlankWnd : public CWnd
{
public:
CBlankWnd () : CWnd ( )
{
m_bModified = FALSE;
}
BOOL m_bModified;
void SetModified(BOOL bValue) { m_bModified = bValue; }
void SetWrapCol(int32 lCol) { m_lWrapCol = lCol; }
int32 GetWrapCol() { return m_lWrapCol; }
protected:
int32 m_lWrapCol;
afx_msg BOOL OnEraseBkgnd( CDC* pDC );
afx_msg void OnSize ( UINT nType, int cx, int cy );
afx_msg void OnChange(void);
afx_msg void OnSetFocus(CWnd*);
afx_msg void OnPaint(void);
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnDestroy();
DECLARE_MESSAGE_MAP();
};
class CComposeFrame;
class CComposeEdit : public CGenericEdit
{
protected:
CComposeFrame * m_pComposeFrame;
HFONT m_cfRegFont;
int m_cxChar;
#ifdef XP_WIN16
HGLOBAL m_hTextElementSegment;
BOOL PreCreateWindow( CREATESTRUCT& cs );
#endif
public:
CComposeEdit(CComposeFrame * pFrame = NULL);
void SetComposeFrame(CComposeFrame * pFrame)
{
m_pComposeFrame = pFrame;
}
~CComposeEdit();
BOOL FindText();
BOOL IsClipboardData();
BOOL IsSelection();
int GetCharWidth() { return m_cxChar; }
afx_msg void OnKeyDown( UINT nChar, UINT nRepCnt, UINT nFlags );
afx_msg int OnCreate ( LPCREATESTRUCT );
afx_msg void OnSetFocus ( CWnd * );
afx_msg void OnCheckSpelling();
// edit menu
afx_msg void OnCut();
afx_msg void OnCopy();
afx_msg void OnPaste();
afx_msg void OnUndo();
afx_msg void OnRedo();
afx_msg void OnDelete();
afx_msg void OnFindInMessage();
afx_msg void OnFindAgain();
afx_msg void OnUpdateCut(CCmdUI * pCmdUI);
afx_msg void OnUpdateCopy(CCmdUI * pCmdUI);
afx_msg void OnUpdatePaste(CCmdUI * pCmdUI);
afx_msg void OnUpdatePasteAsQuote(CCmdUI * pCmdUI);
afx_msg void OnUpdateUndo(CCmdUI * pCmdUI);
afx_msg void OnUpdateRedo(CCmdUI * pCmdUI);
afx_msg void OnUpdateDelete(CCmdUI * pCmdUI);
afx_msg void OnUpdateFindInMessage(CCmdUI * pCmdUI);
afx_msg void OnUpdateFindAgain(CCmdUI * pCmdUI);
afx_msg void OnSelectAll();
afx_msg void OnUpdateSelectAll(CCmdUI *pCmdUI);
afx_msg LRESULT OnFindReplace(WPARAM wParam, LPARAM lParam);
DECLARE_MESSAGE_MAP()
};
#endif

View File

@ -1,97 +0,0 @@
/* -*- 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.
*/
/* COMPSTD.H - standard Compose window header file contains standard
* definitions which are used throughout all comp*.* files.
*/
#ifndef __COMPSTD_H
#define __COMPSTD_H
#include "msgcom.h"
#define IDX_COMPOSEADDRESS 0 // tab indexes for attach/address
#define IDX_COMPOSEATTACH 1
#define IDX_COMPOSEOPTIONS 2
#define IDX_COMPOSEATTACHFILE 3
#define IDX_COMPOSEATTACHMAIL 4
#define IDX_TOOL_ADDRESS 0
#define IDX_TOOL_ATTACH 1
#define IDX_TOOL_OPTIONS 2
#define IDX_TOOL_COLLAPSE 3
#define EDIT_FIELD_OFFSET 4 // pixel border surrounding fields
#define EDIT_MARGIN_OFFSET 4
#define EDIT_TOP_MARGIN 4
#define IDC_ADDRESSADD 150
#define IDC_ADDRESSREMOVE 151
#define IDC_ADDRESSSELECT 152
#define IDC_DIRECTORY 153
#define IDC_ADDRESSTAB 155
#define IDC_ATTACHTAB 156
#define IDC_OPTIONSTAB 157
#define TABCTRL_HOME -2
#define TABCTRL_END -1
#define IDC_COMPOSEEDITOR 338 // control id for editor
#define FLIPPY_WIDTH 16 // width and height of the expansion bitmap
#define FLIPPY_HEIGHT 16
extern char * EDT_NEW_DOC_URL; // this is for the Gold editor. Loading this
// URL causes the creation of a new (blank)
// editor file.
class CNSAttachDropTarget : public COleDropTarget
{
public:
//Construction
CNSAttachDropTarget() { };
BOOL OnDrop(CWnd *, COleDataObject *, DROPEFFECT, CPoint);
DROPEFFECT OnDragEnter(CWnd *, COleDataObject *, DWORD, CPoint);
DROPEFFECT OnDragOver(CWnd *, COleDataObject *, DWORD, CPoint);
void OnDragLeave(CWnd *);
};
extern "C" int FE_LoadExchangeInfo(MWContext * context);
// temporary functions to allow the regular text editor to be functional
extern "C" int FE_GetMessageBody(
MSG_Pane *pPane,
char **ppBody,
uint32 *ulBodySize,
MSG_FontCode **ppFontChanges);
extern "C" void FE_InsertMessageCompositionText(
MWContext * context,
const char* text,
XP_Bool leaveCursorAtBeginning);
////////////////////////////////////////////////////////////
// backend candidates
MSG_HEADER_SET MSG_StringToHeaderMask(char * string);
const char * MSG_HeaderMaskToString(MSG_HEADER_SET header);
////////////////////////////////////////////////////////////
// end backend candidates
#endif

View File

@ -1,295 +0,0 @@
/* -*- 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.
*/
// confhook.cpp : implementation file
//
#include "stdafx.h"
#include <shellapi.h>
#include "confhook.h"
extern "C" {
#include "xpgetstr.h"
extern int MK_MSG_CANT_FIND_CALLPOINT;
};
//
// NEEDED STRINGS
// ==============
// MK_MSG_CANT_FIND_CONFAPP - Can't find the app to run
// IDS_CONFAPP - "Conferencing Application" type string, I think?
//
//
// Other internal defines...
//
#define CONFAPP_UNAVAILABLE 0
#define CONFAPP_CONFERENCE 1
#define CONFAPP_THIRDPARTY 2
//
// Registry stuff:
//
#define _MAX_ARG_LEN_ 128
//
// Sections for profile lookups...
//
static TCHAR lpszWin32ConfAppBranch[] = _T("Software\\Netscape\\ConfApplication");
static TCHAR lpszWin16ConfAppSection[] = _T("ConfApplication");
static int confAppAvailibility = CONFAPP_UNAVAILABLE;
BOOL
FileExists(LPCSTR szFile)
{
struct _stat buf;
int result;
result = _stat( szFile, &buf );
return (result == 0);
}
//
// This routine is specific to looking up values in the new ConfApp
// registry/ini file section.
//
CString
FEU_GetConfAppProfileString(const CString &queryString)
{
char argBuffer[_MAX_PATH + 1];
CString returnVal("");
returnVal = "";
strcpy(argBuffer, "");
//
// If the defined conference application on the system is
// still a leftover NSCP Conference, we should still use
// that setting. In this case, simply return the default
// value for Netscape Conference.
//
if (confAppAvailibility == CONFAPP_CONFERENCE)
{
//
// First, we will assign a value to argBuffer that corresponds
// to NSCP Conference's value for this particular argument.
//
if (queryString == IDS_CONFAPP_FULLPATHNAME)
{
CString installDirectory, executable;
#ifdef WIN32
installDirectory = FEU_GetInstallationDirectory(szLoadString(IDS_CONFERENCE_REGISTRY), szLoadString(IDS_PATHNAME));
executable = "\\NSCONF32.EXE";
#else // XP_WIN16
installDirectory = FEU_GetInstallationDirectory(szLoadString(IDS_CONFERENCE),szLoadString(IDS_INSTALL_DIRECTORY));
executable = "\\NSCSTART.EXE";
#endif
wsprintf(argBuffer, "%s%s", installDirectory, executable);
}
else if (queryString == IDS_CONFAPP_NOBANNER)
{
strcpy(argBuffer, "/b");
}
else if (queryString == IDS_CONFAPP_MIMEFILE)
{
strcpy(argBuffer, "/f");
}
else if (queryString == IDS_CONFAPP_DIRECTIP)
{
strcpy(argBuffer, "/d");
}
else if (queryString == IDS_CONFAPP_EMAIL)
{
strcpy(argBuffer, "/i");
}
else if (queryString == IDS_CONFAPP_SERVER)
{
strcpy(argBuffer, "/s");
}
else if (queryString == IDS_CONFAPP_USERNAME)
{
strcpy(argBuffer, "");
}
returnVal = argBuffer;
return returnVal;
}
#ifdef _WIN32
HKEY hKey;
LONG lResult;
char szVal[_MAX_PATH + 1];
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpszWin32ConfAppBranch, 0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS)
{
unsigned long cbData = sizeof(szVal);
lResult = RegQueryValueEx(hKey, queryString, NULL, NULL, (LPBYTE) szVal, &cbData);
RegCloseKey(hKey);
if (lResult == ERROR_SUCCESS)
{
returnVal = szVal;
}
}
#else // XP_WIN16
char szPath[_MAX_PATH + 1];
const char *pOldProfile = theApp.m_pszProfileName;
UINT nSize = GetWindowsDirectory(szPath, _MAX_PATH + 1);
XP_STRCPY(szPath + nSize, szLoadString(IDS_NSCPINI));
theApp.m_pszProfileName = szPath;
returnVal = theApp.GetProfileString(lpszWin16ConfAppSection, queryString, NULL);
theApp.m_pszProfileName = pOldProfile;
#endif
return returnVal;
}
//
// This function is needed to see if a conferencing endpoint
// is defined on the machine. Return true if there is or false
// if it doesn't exist.
//
BOOL
FEU_IsConfAppAvailable(void)
{
//
// Check to see if a conf. app is defined on the local
// machine.
//
CString fileName = FEU_GetConfAppProfileString(IDS_CONFAPP_FULLPATHNAME);
if (fileName.IsEmpty())
{
if (FEU_IsConferenceAvailable())
{
confAppAvailibility = CONFAPP_CONFERENCE;
return TRUE;
}
else
{
confAppAvailibility = CONFAPP_UNAVAILABLE;
return FALSE;
}
}
//
// We should really make sure there is something at the location
// defined before we go further.
//
if (FileExists(fileName))
{
confAppAvailibility = CONFAPP_THIRDPARTY;
return TRUE;
}
else
{
confAppAvailibility = CONFAPP_UNAVAILABLE;
return FALSE;
}
}
//
// This will be the central function where we will do the launching
// of Conference on this endpoint.
//
// Args: makeCall - true if this is going to make a call or false
// if we are just launching the appliction.
//
void
LaunchConfEndpoint(char *commandLine, HWND parent)
{
CString executable;
char *cline = commandLine;
char cbuf[_MAX_ARG_LEN_];
executable = FEU_GetConfAppProfileString(IDS_CONFAPP_FULLPATHNAME);
//
// Check to see if the executable is defined on the machine. If it is not, then
// show a message and return.
//
if (executable.IsEmpty())
{
CString s;
if (s.LoadString( IDS_CONFERENCE ))
{
::MessageBox(parent, XP_GetString(MK_MSG_CANT_FIND_CALLPOINT), s, MB_OK | MB_APPLMODAL);
}
return;
}
//
// Check if the commandline is null...if so, we need to try to find the banner
// suppression flag and pass it to the executable.
//
if (!commandLine)
{
CString nobannerFlag = FEU_GetConfAppProfileString(IDS_CONFAPP_NOBANNER);
strcpy(cbuf, nobannerFlag);
cline = &(cbuf[0]);
}
int uSpawn = (int) ShellExecute(NULL, "open", executable, cline, ".", SW_SHOW);
if(uSpawn <= 32)
{
char szMsg[80];
switch(uSpawn)
{
case 0:
case 8:
sprintf(szMsg, szLoadString(IDS_WINEXEC_0_8));
break;
case 2:
case 3:
sprintf(szMsg, szLoadString(IDS_WINEXEC_2_3));
break;
case 10:
case 11:
case 12:
case 13:
case 14:
case 15:
sprintf(szMsg, szLoadString(IDS_WINEXEC_10_THRU_15));
break;
case 16:
sprintf(szMsg, szLoadString(IDS_WINEXEC_16));
break;
case 21:
sprintf(szMsg, szLoadString(IDS_WINEXEC_21));
break;
default:
sprintf(szMsg, szLoadString(IDS_WINEXEC_XX), uSpawn);
break;
}
CString s;
if (s.LoadString( IDS_BOOKMARK_ADDRESSPROPERTIES ))
{
::MessageBox(parent, szMsg, s, MB_OK | MB_APPLMODAL);
}
}
}

View File

@ -1,68 +0,0 @@
/* -*- 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.
*/
//
// This is a header file for the confhook.cpp file.
// Written by: Rich Pizzarro (rhp)
//
#ifndef _CONFHOOK
#define _CONFHOOK
//
// Defines needed for registry key names...
//
#define IDS_CONFAPP_FULLPATHNAME "FullPathName"
#define IDS_CONFAPP_NOBANNER "BannerSuppressionFlag"
#define IDS_CONFAPP_MIMEFILE "MIMEFileFlag"
#define IDS_CONFAPP_DIRECTIP "DirectIPFlag"
#define IDS_CONFAPP_EMAIL "EmailCallFlag"
#define IDS_CONFAPP_SERVER "QueryServerFlag"
#define IDS_CONFAPP_USERNAME "UserNameFlag"
//
// This routine will launch the conferencing endpoint define to the
// machine.
//
// Arguments:
// commandLine: This is the command line to pass into the
// conferencing application.
//
//
void
LaunchConfEndpoint(char *commandLine, HWND parentWnd = NULL);
//
// This routine is specific to looking up values in the new ConfApp
// registry/ini file section.
//
CString
FEU_GetConfAppProfileString(const CString &queryString);
//
// This function is needed to see if a conferencing endpoint
// is defined on the machine. Return true if there is or false
// if it doesn't exist.
//
BOOL
FEU_IsConfAppAvailable(void);
#endif // _CONFHOOK

View File

@ -1,19 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/*
* The contents of this file are subject to the Netscape Public License
Version 1.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.mozilla.org/NPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the License.
The Original Code is Mozilla Communicator client code, released March 31, 1998.
The Initial Developer of the Original Code is Netscape Communications Corporation.
Portions created by Netscape are Copyright (C) 1998 Netscape Communications Corporation.
All Rights Reserved.
*/
extern const char * const module_name = "mozilla.cpl";

File diff suppressed because it is too large Load Diff

View File

@ -1,371 +0,0 @@
/* -*- 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.
*/
#ifndef _CSTTLBR2_H
#define _CSTTLBR2_H
#include "stdafx.h"
#include "toolbar2.h"
#include "animbar2.h"
#define CT_HIDETOOLBAR (WM_USER + 15)
#define CT_DRAGTOOLBAR (WM_USER + 16)
#define CT_DRAGTOOLBAR_OVER (WM_USER + 17)
#define CT_CUSTOMIZE (WM_USER + 18)
#define IDC_COLLAPSE (WM_USER + 19)
typedef enum {eLARGE_HTAB, eSMALL_HTAB} HTAB_BITMAP;
class CCustToolbar;
#ifdef XP_WIN16
class CNetscapeControlBar : public CControlBar {
protected:
virtual LRESULT WindowProc(UINT nMsg, WPARAM wParam, LPARAM lParam);
};
#endif
// Class: CToolbarWindow
//
// The window that resides within the Tabbed toolbar. It holds the toolbar
// passed in by the user of the customizable toolbar
class CToolbarWindow {
protected:
CWnd *m_pToolbar; // the toolbar we're storing
int m_nNoviceHeight; // the height when in novice mode
int m_nAdvancedHeight; // the height when in advanced mode
int m_nToolbarStyle; // is this pictures and text, pictures, or text
HTAB_BITMAP m_nHTab; // Type of horizontal tab
public:
CToolbarWindow(CWnd *pToolbar, int nToolbarStyle, int nNoviceHeight, int nAdvancedHeight,
HTAB_BITMAP nHTab);
~CToolbarWindow();
CWnd *GetToolbar(void);
virtual CWnd* GetNSToolbar() { return NULL; }
// if bWindowHeight is TRUE then use toolbar's height, if FALSE use passed in height
virtual int GetHeight(void);
int GetNoviceHeight(void) { return m_nNoviceHeight; }
int GetAdvancedHeight(void) { return m_nAdvancedHeight; }
virtual void SetToolbarStyle(int nToolbarStyle) { m_nToolbarStyle = nToolbarStyle;}
int GetToolbarStyle(void) { return m_nToolbarStyle; }
HTAB_BITMAP GetHTab(void) { return m_nHTab; }
virtual void OnUpdateCmdUI( CFrameWnd* pTarget, BOOL bDisableIfNoHndler ){}
virtual void UpdateURLBars(char* url) {}
};
// Class: CButtonToolbarWindow
//
// The window that resides within the Tabbed toolbar. It MUST hold a CNSToolbar2.
class CButtonToolbarWindow: public CToolbarWindow {
public:
CButtonToolbarWindow(CWnd *pToolbar, int nToolbarStyle, int nNoviceHeight, int nAdvancedHeight,
HTAB_BITMAP nHTab);
virtual void OnUpdateCmdUI( CFrameWnd* pTarget, BOOL bDisableIfNoHndler );
virtual void UpdateURLBars(char* url);
virtual void SetToolbarStyle(int nToolbarStyle);
virtual int GetHeight(void);
virtual CWnd* GetNSToolbar() { return GetToolbar(); }
};
// Class: // Class: CControlBarToolbarWindow
//
// The window that resides within the Tabbed toolbar. It does not hold a CNSToolbar2.
class CControlBarToolbarWindow: public CToolbarWindow {
public:
CControlBarToolbarWindow(CWnd *pToolbar, int nToolbarStyle, int nNoviceHeight, int nAdvancedHeight,
HTAB_BITMAP nHTab);
virtual void OnUpdateCmdUI( CFrameWnd* pTarget, BOOL bDisableIfNoHndler );
virtual int GetHeight(void);
};
class CDragToolbar : public CWnd {
protected:
CToolbarWindow * m_pToolbar;
BOOL m_bIsOpen;
BOOL m_bIsShowing;
CPoint m_mouseDownPoint;
BOOL m_bDragging;
BOOL m_bMouseDown;
UINT m_nDragTimer;
BOOL m_bMouseInTab;
UINT m_nTabFocusTimer;
CAnimationBar2* m_pAnimation;
HTAB_BITMAP m_eHTabType;
BOOL m_bEraseBackground;
CString m_tabTip;
int m_nToolID;
CNSToolTip2 m_toolTip;
UINT m_nToolbarID;
public:
CDragToolbar();
~CDragToolbar();
virtual int Create(CWnd *pParent, CToolbarWindow *pToolbar);
virtual BOOL ShouldClipChildren() { return TRUE; }
CWnd *GetToolbar(void);
int GetToolbarHeight(void);
int GetMouseOffsetWithinToolbar(void) { return m_mouseDownPoint.y; }
void SetMouseOffsetWithinToolbar(int y) { m_mouseDownPoint.y = y; }
void SetShowing(BOOL bIsShowing) { m_bIsShowing = bIsShowing; }
BOOL GetShowing(void) { return m_bIsShowing; }
virtual void SetOpen(BOOL bIsOpen);
BOOL GetOpen(void) { return m_bIsOpen;}
void SetTabTip(CString tabTip);
CString &GetTabTip (void) { return m_tabTip; }
void SetToolID(int nToolID) { m_nToolID = nToolID; }
int GetToolID(void) { return m_nToolID; }
void SetToolbarID(int nToolbarID) {m_nToolbarID = nToolbarID;}
UINT GetToolbarID(void) { return m_nToolbarID;}
void SetToolbarStyle(int nToolbarStyle);
virtual void BeActiveToolbar() {}
void SetAnimation(CAnimationBar2 *pAnimation);
HTAB_BITMAP GetHTabType(void) { return m_eHTabType;}
void OnUpdateCmdUI( CFrameWnd* pTarget, BOOL bDisableIfNoHndler );
virtual void UpdateURLBars(char* url);
virtual BOOL MakeVisible(BOOL visible);
virtual BOOL WantsToBeVisible();
// Generated message map functions
//{{AFX_MSG(CDragToolbar)
afx_msg void OnSize( UINT nType, int cx, int cy );
afx_msg void OnPaint(void);
afx_msg void OnShowWindow( BOOL bShow, UINT nStatus );
afx_msg BOOL OnEraseBkgnd( CDC* pDC );
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
virtual afx_msg void OnTimer( UINT nIDEvent );
afx_msg void OnPaletteChanged( CWnd* pFocusWnd );
afx_msg void OnSysColorChange();
//}}AFX_MSG
private:
void ArrangeToolbar(int nWidth, int nHeight);
void StopDragging(void);
void CheckIfMouseInTab(CPoint point);
DECLARE_MESSAGE_MAP()
};
class CCustToolbarExternalTab {
private:
CWnd * m_pOwner;
HTAB_BITMAP m_eHTabType;
CString m_tabTip;
int m_nToolID;
UINT m_nTabID;
public:
CCustToolbarExternalTab(CWnd *pOwner, HTAB_BITMAP eHTabType, UINT nTipID, UINT nTabID);
CWnd *GetOwner(void);
HTAB_BITMAP GetHTabType(void);
CString &GetTabTip (void);
void SetToolID(int nToolID) { m_nToolID = nToolID; }
int GetToolID(void) { return m_nToolID; }
UINT GetTabID(void);
};
class CRDFToolbar;
class CCustToolbar : public CControlBar {
DECLARE_DYNAMIC(CCustToolbar)
protected:
CFrameWnd * m_pParent;
CDragToolbar** m_pToolbarArray;
CDragToolbar** m_pHiddenToolbarArray;
int m_nNumToolbars;
int m_nActiveToolbars;
CAnimationBar2* m_pAnimation; //The Netscape Icon Animation
int m_nAnimationPos;
int m_nNumOpen;
int m_nNumShowing;
CPoint m_oldDragPoint;
HBITMAP m_pHorizTabArray[4];
BOOL m_bEraseBackground;
CNSToolTip2 m_toolTip;
BOOL m_bSaveToolbarInfo; // Do we save toolbar state
UINT m_nTabHaveFocusTimer;
int m_nMouseOverTab;
CPtrArray m_externalTabArray;
BOOL m_bBottomBorder;
enum HORIZTAB {LARGE_FIRST, LARGE_OTHER, SMALL_FIRST, SMALL_OTHER};
public:
//Construction/destruction
CCustToolbar(int nNumToolbars);
virtual ~CCustToolbar();
//Creation
int Create(CFrameWnd* pParent, BOOL bHasAnimation);
void RemoveToolbarAtIndex(int index);
void AddNewWindowAtIndex(UINT nToolbarID, CToolbarWindow* pWindow, int nPosition, int nNoviceHeight, int nAdvancedHeight,
UINT nTabBitmapIndex, CString tabTip, BOOL bIsNoviceMode);
inline void AddNewWindow(UINT nToolbarID, CToolbarWindow* pWindow, int nPosition, int nNoviceHeight, int nAdvancedHeight,
UINT nTabBitmapIndex, CString tabTip, BOOL bIsNoviceMode, BOOL bIsOpen, BOOL bIsAnimation)
{ AddNewWindowGuts(nToolbarID, pWindow, nPosition, tabTip, TRUE, bIsOpen); }
inline void AddNewWindow(UINT nToolbarID, CToolbarWindow* pWindow, int nPosition, int nNoviceHeight, int nAdvancedHeight,
UINT nTabBitmapIndex, CString tabTip, BOOL bIsNoviceMode, BOOL bIsAnimation)
{ AddNewWindowGuts(nToolbarID, pWindow, nPosition, tabTip, FALSE, FALSE); }
// Call this function when you are finished adding the toolbars that go in the
// customizable toolbar.
void FinishedAddingNewWindows(void){}
CDragToolbar** GetVisibleToolbarArray() { return m_pToolbarArray; };
//Controlling the animated icon
void StopAnimation();
void StartAnimation();
void SetToolbarStyle(int nToolbarStyle);
void BeActiveToolbar();
BOOL IsWindowShowing(CWnd *pToolbar);
BOOL IsWindowShowing(UINT nToolbarID);
BOOL IsWindowIconized(CWnd *pToolbar);
int GetWindowPosition(CWnd *pToolbar);
void ShowToolbar(CWnd *pToolbar, BOOL bShow);
void ShowToolbar(UINT nToolbarID, BOOL bShow);
void RenameToolbar(UINT nOldID, UINT nNewID, UINT nNewToolTipID);
CWnd *GetToolbar(UINT nToolbarID);
//Positioning/Resizing
CSize CalcDynamicLayout(int nLength, DWORD dwMode );
virtual void OnUpdateCmdUI( CFrameWnd* pTarget, BOOL bDisableIfNoHndler );
virtual void UpdateURLBars(char* url);
void Customize(CRDFToolbar *pRDFToolbar = NULL, int nSelectedButton = 0);
BOOL GetSaveToolbarInfo(void);
void SetSaveToolbarInfo(BOOL bSaveToolbarInfo);
void SetNewParentFrame(CFrameWnd *pParent);
// Adding an external tab will cause the customizable toolbar to display
// a tab of eHTabType in iconized form. If that tab is clicked, the tab
// will be removed and a message will be sent to pOwner that the hidden
// window should now be shown.
void AddExternalTab(CWnd *pOwner, HTAB_BITMAP eHTabType, UINT nTipID, UINT nTabID);
// Removing this tab will cause it to no longer be drawn and mouse clicks will no longer
// be sent to pOwner.
void RemoveExternalTab(UINT nTabID);
void SetBottomBorder(BOOL bBottomBorder);
int FindDragToolbarFromWindow(CWnd *pWindow, CDragToolbar **pToolbarArray);
int FindDragToolbarFromID(UINT nToolbarID, CDragToolbar **pToolbarArray);
// Generated message map functions
//{{AFX_MSG(CCustToolbar)
afx_msg void OnSize( UINT nType, int cx, int cy );
afx_msg void OnPaint(void);
afx_msg void OnShowWindow( BOOL bShow, UINT nStatus );
afx_msg BOOL OnEraseBkgnd( CDC* pDC );
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg LRESULT OnHideToolbar(WPARAM, LPARAM);
afx_msg LRESULT OnDragToolbar(WPARAM, LPARAM);
afx_msg LRESULT OnDragToolbarOver(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT CCustToolbar::OnCustomize(WPARAM wParam, LPARAM lParam);
#ifndef WIN32
afx_msg LRESULT OnSizeParent(WPARAM wParam, LPARAM lParam);
#endif
virtual afx_msg void OnTimer( UINT nIDEvent );
afx_msg void OnPaletteChanged( CWnd* pFocusWnd );
//}}AFX_MSG
protected:
// virtual BOOL OnNotify( WPARAM wParam, LPARAM lParam, LRESULT* pResult );
void AddNewWindowGuts(UINT nToolbarID, CToolbarWindow* pWindow, int nPosition,
CString tabTip, BOOL bForceOpen, BOOL bIsOpen);
int CheckOpenButtons(CPoint point);
int CheckClosedButtons(CPoint point);
BOOL PointInClosedTab(CPoint point, HTAB_BITMAP tabType, int nNumClosedButtons, int nStartX,
int nBottom);
virtual void DrawSeparator(int i, HDC hDC, int nStartX, int nEndX, int nStartY, BOOL bToolbarSeparator = TRUE);
void SwitchChildren(CDragToolbar *pOriginal, CDragToolbar *pSwitch, int dir, int yPoint);
int FindIndex(CDragToolbar *pToolbar);
CDragToolbar *FindToolbarFromPoint(CPoint point, CDragToolbar *pIgnore);
int FindFirstShowingToolbar(int nIndex);
HBITMAP GetClosedButtonBitmap(HTAB_BITMAP tabType, int nNumClosedButtons);
int GetNextClosedButtonX(HTAB_BITMAP tabType, int nNumClosedButtons, int nClosedStartX);
void GetClosedButtonRegion(HTAB_BITMAP tabType, int nNumClosedButtons, CRgn &rgn);
HBITMAP CreateHorizTab(UINT nID);
void ShowDragToolbar(int nIndex, BOOL bShow);
void OpenDragToolbar(int nIndex);
void OpenExternalTab(int nIndex);
void CheckAnimationChangedToolbar(CDragToolbar *pToolbar, int nIndex, BOOL bOpen);
void ChangeToolTips(int nHeight);
void FindToolRect(CRect & toolRect, HTAB_BITMAP eTabType, int nStartX, int nStartY, int nButtonNum);
int FindFirstAvailablePosition(void);
void DrawClosedTab(HDC hCompatibleDC, HDC hDestDC, HTAB_BITMAP tabType, int nNumClosedButtons,
BOOL bMouseOver, int nStartX, int nBottom);
virtual CDragToolbar* CreateDragBar();
DECLARE_MESSAGE_MAP()
};
#endif

View File

@ -1,66 +0,0 @@
/* -*- 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.
*/
// The main file used to provide customization (locking) of preferences to
// OEM partners and/or MIS directors for the Enterprise market....
//#define WFE_FILE 1
#include "stdafx.h"
#include "custom.h"
#include "resource.h"
#include "mainfrm.h"
#include "xp.h"
#include "sechash.h"
#include "prefapi.h"
BOOL CUST_IsCustomAnimation(int * iFrames)
{
char *pFile = NULL;
BOOL bRet = FALSE;
// set iFrames to default
int iError = PREF_CopyConfigString("toolbar.logo.win_small_file",&pFile);
if (PREF_ERROR != iError && pFile) {
if (*pFile) bRet = TRUE;
XP_FREE(pFile);
pFile = NULL;
}
pFile = NULL;
iError = PREF_CopyConfigString("toolbar.logo.win_large_file",&pFile);
if (PREF_ERROR != iError && pFile) {
if (*pFile) bRet = TRUE;
XP_FREE(pFile);
pFile = NULL;
}
if (bRet) {
int32 iTmp;
PREF_GetConfigInt("toolbar.logo.frames",&iTmp);
if (iTmp > 0 && iTmp <1000) // pure arbitrary bounds check
if (iFrames) *iFrames = iTmp;
}
return bRet;
}
void CUST_LoadCustomPaletteEntries()
{
int idx;
char * entry;
char szBuf[24];
int red = 0,green = 0,blue = 0;
}

View File

@ -1,21 +0,0 @@
/* -*- 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.
*/
// Prototypes
extern BOOL CUST_IsCustomAnimation(int * iFrames);
extern void CUST_LoadCustomPaletteEntries();

File diff suppressed because it is too large Load Diff

View File

@ -1,370 +0,0 @@
/* -*- 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.
*/
#ifndef __CX_ABSTRACT_H
// Avoid include redundancy
//
#define __CX_ABSTRACT_H
#ifndef _APICX_H
#include "apicx.h"
#endif
#include "ni_pixmp.h"
// Purpose: Provide the abstract context implementation.
// Comments: Pure virtual; must be derived from.
// Through wrapping functions, the C XP libs will call into the context, and
// virtual resolution will resolve the correct context.
// Revision History:
// 04-26-95 created GAB
//
// Required Includes
//
// Constants
//
// Structures
//
// Mechanism for run time information.
// Must be updated with the addition of every new context type.
// For optimizations for specific output devices in common code.
// All classes meant to be abstract will have values of 0x0.
// This allows us to ASSERT if the context is of a valid type.
typedef enum ContextType {
Abstract = 0x0000,
DeviceContext = 0x0000,
Stubs = 0x0000,
Network,
Save,
Print,
Pane,
Window,
Bookmarks,
MetaFile,
MailCX,
NewsCX,
MailThreadCX,
NewsThreadCX,
SearchCX,
AddressCX,
HtmlHelp,
HistoryCX,
IconCX,
RDFSlave,
MaxContextTypes // Leave as last entry please
} ContextType;
#ifdef MOZ_NGLAYOUT
class nsIWebWidget;
#endif
// The abstract windows context
class CAbstractCX: public IMWContext {
private:
// The actual XP context.
MWContext *m_pXPCX;
protected:
// Set this in the constructor of each derived class for run time type information.
ContextType m_cxType;
IL_GroupContext* m_pImageGroupContext;
public:
CAbstractCX();
virtual ~CAbstractCX();
// Function to load a URL with this context, with the custom exit routing handler.
// Use this to NET_GetURL instead or XL_TranslateText instead.
virtual int GetUrl(URL_Struct *pUrl, FO_Present_Types iFormatOut, BOOL bReallyLoad = TRUE, BOOL bForceNew = FALSE);
#ifndef MOZ_NGLAYOUT
virtual XL_TextTranslation TranslateText(URL_Struct *pUrl, const char *pFileName, const char *pPrefix = NULL, int iWidth = 75);
#endif /* MOZ_NGLAYOUT */
virtual void UpdateStopState(MWContext *pContext) = 0;
// Generic brain dead interface to load a URL.
// This used to be known as OnNormalLoad.
int NormalGetUrl(const char *pUrl, const char *pReferrer = NULL, const char *pTarget = NULL, BOOL bForceNew = FALSE);
// Atomic load operations regarding history.
virtual void Reload(NET_ReloadMethod iReloadType = NET_NORMAL_RELOAD);
virtual void NiceReload(int usePassInType = 0, NET_ReloadMethod iReloadType = NET_NORMAL_RELOAD);
virtual void Back();
virtual void Forward();
virtual void ImageComplete(NI_Pixmap* image) {;}
virtual void SetInternetKeyword(const char *keyword) {}
virtual BITMAPINFO* NewPixmap(NI_Pixmap* pImage, BOOL mask = FALSE) { return NULL;}
// Function for easy creation of a URL from the current history entry.
virtual URL_Struct *CreateUrlFromHist(BOOL bClearStateData = FALSE, SHIST_SavedData *pSavedData = NULL, BOOL bWysiwyg = FALSE);
virtual BOOL CanCreateUrlFromHist();
// Construction/destruction (creates/destroys XP context)
virtual void DestroyContext();
void NiceDestroyContext();
private:
BOOL m_bDestroyed;
public:
char * m_pLastStatus;
BOOL IsDestroyed() const {
// This function is very important.
// It allows you to write code which can detect when a context
// is actually in the process of being destroyed.
// In many cases, you will receive callbacks from the XP libraries
// while the context is being destroyed. If you GPF, then use
// this function to better detect your course of action.
return(m_bDestroyed);
}
public:
// Access to type information, for optimizations in common code.
ContextType GetContextType() const {
ASSERT(m_cxType);
return(m_cxType);
}
int16 GetWinCsid();
BOOL IsDCContext() const {
ASSERT(m_cxType);
switch(m_cxType) {
case Print:
case Window:
case MetaFile:
case Pane:
return(TRUE);
default:
return(FALSE);
}
}
BOOL IsPureDCContext() const {
// Return TRUE if all we depend upon is
// a DC for display (non windowed).
return(!IsWindowContext() && IsDCContext() == TRUE);
}
BOOL IsPrintContext() const {
ASSERT(m_cxType);
switch(m_cxType) {
case Print:
return(TRUE);
default:
return(FALSE);
}
}
BOOL IsWindowContext() const {
ASSERT(m_cxType);
switch(m_cxType) {
case Window:
case Pane:
return(TRUE);
default:
return(FALSE);
}
}
BOOL IsFrameContext() const {
ASSERT(m_cxType);
switch (m_cxType) {
case Window:
return TRUE;
default:
return FALSE;
}
}
public:
// Owner of any dialogs that we'll bring up.
virtual CWnd *GetDialogOwner() const;
public:
// For the foolhardy, who desire access to the XP context in our hour of need.
MWContext *GetContext() const {
return(m_pXPCX);
}
MWContext *GetParentContext() const {
// Only valid if IsGridCell is true.
return(m_pXPCX->grid_parent);
}
// Override to allow XP Context->Frame matching
virtual CFrameGlue *GetFrame() const { return NULL; }
#ifdef MOZ_NGLAYOUT
// Convenience to get/set WebWidget from MWContext.
nsIWebWidget *GetWebWidget() const {
return((nsIWebWidget*)m_pXPCX->fe.webWidget);
}
void SetWebWidget(nsIWebWidget *pWW) {
m_pXPCX->fe.webWidget = pWW;
}
#endif
// Named contexts and grid stuff.
void SetContextName(const char *pName);
void SetParentContext(MWContext *pParentContext);
BOOL IsGridCell() const;
BOOL IsGridParent() const;
// layout modularization effort.
public:
MWContext *GetDocumentContext() const {
return(m_pXPCX);
}
public:
// A function to interrupt any loads in this context.
// This happens immediatly or idly.
// Also, if the call is not nested, it may destroy this object
// if DestroyContext has been called previously.
virtual void Interrupt();
public:
BOOL m_bIdleInterrupt;
BOOL m_bIdleDestroy;
private:
int m_iInterruptNest;
private:
BOOL m_bImagesLoading; // True if any images in this context are loading.
BOOL m_bImagesLooping; // True if any images in this context are looping.
BOOL m_bImagesDelayed; // True if any images in this context are delayed.
BOOL m_bMochaImagesLoading;
BOOL m_bMochaImagesLooping;
BOOL m_bMochaImagesDelayed;
BOOL IsContextStoppableRecurse();
public:
BOOL m_bNetHelpWnd;
BOOL IsNetHelpWnd() { return m_bNetHelpWnd; }
public:
// A wrapper around XP_IsContextStoppable. This is necessary
// because a context is stoppable if its image context is
// stoppable, and the image context is owned by the Front End.
BOOL IsContextStoppable();
// Returns TRUE if this context or its children have any looping images.
BOOL IsContextLooping();
void SetImagesLoading(BOOL val) {m_bImagesLoading = val;}
void SetImagesLooping(BOOL val) {m_bImagesLooping = val;}
void SetImagesDelayed(BOOL val) {m_bImagesDelayed = val;}
void SetMochaImagesLoading(BOOL val) {m_bMochaImagesLoading = val;}
void SetMochaImagesLooping(BOOL val) {m_bMochaImagesLooping = val;}
void SetMochaImagesDelayed(BOOL val) {m_bMochaImagesDelayed = val;}
// Client pull timer information.
public:
void *m_pClientPullData;
void *m_pClientPullTimeout;
private:
// Information to time a load.
time_t m_ttStopwatch;
time_t m_ttOldwatch;
public:
BOOL ProgressReady(time_t ttCurTime) {
BOOL bRetval = ttCurTime != m_ttOldwatch;
m_ttOldwatch = ttCurTime;
return(bRetval);
}
time_t GetElapsedSeconds(time_t ttCurTime) {
return(ttCurTime - m_ttStopwatch);
}
//moved to .cpp due to dependency problems
void ResetStopwatch();
public:
// Context Identification.
DWORD GetContextID() {
return((DWORD)(m_pXPCX->context_id));
}
static CAbstractCX *FindContextByID(DWORD dwID);
public:
// NCAPI context pointer.
CNcapiUrlData *m_pNcapiUrlData;
// Progress Helpers
virtual int32 QueryProgressPercent() { return 0; }
virtual void StartAnimation() {}
virtual void StopAnimation() {}
// MFC Helpers; abstraction away
public:
virtual void MailDocument();
virtual BOOL CanMailDocument();
virtual void NewWindow();
virtual BOOL CanNewWindow();
virtual void OpenUrl();
virtual BOOL CanOpenUrl();
virtual void AllBack();
virtual BOOL CanAllBack();
virtual void AllForward();
virtual BOOL CanAllForward();
virtual void AllInterrupt();
virtual BOOL CanAllInterrupt();
virtual void AllReload(NET_ReloadMethod iReloadType = NET_NORMAL_RELOAD);
virtual BOOL CanAllReload();
virtual void CopySelection();
virtual BOOL CanCopySelection();
virtual void AddToBookmarks();
virtual BOOL CanAddToBookmarks();
#ifdef LAYERS
virtual BOOL HandleLayerEvent(CL_Layer * pLayer, CL_Event * pEvent)
{ return FALSE; }
virtual BOOL HandleEmbedEvent(LO_EmbedStruct *embed, CL_Event * pEvent)
{ return FALSE; }
#endif
virtual void GoHome(){}
virtual void AllFind(MWContext *pSearchContext = NULL){}
virtual BOOL DoFind(CWnd * pWnd, const char * pFindString,
BOOL bMatchCase, BOOL bSearchDown, BOOL bAlertOnNotFound)
{ return FALSE; }
virtual void PrintContext(){}
virtual void GetWindowOffset(int32 *x, int32 *y){}
void MochaDestructionComplete();
};
// Global variables
//
// Macros
//
// Function declarations
//
// The common front end, called in every context, that in turn uses a virtual call into
// the correct context, except in specific optimized situations.
#define MAKE_FE_FUNCS_PREFIX(funkage) CFE_##funkage
#define MAKE_FE_FUNCS_EXTERN
#include "mk_cx_fn.h"
// The exit routines.
void CFE_GetUrlExitRoutine(URL_Struct *pUrl, int iStatus, MWContext *pContext);
void CFE_SimpleGetUrlExitRoutine(URL_Struct *pUrl, int iStatus, MWContext *pContext);
void CFE_TextTranslationExitRoutine(PrintSetup *pTextFE);
#endif // __CX_ABSTRACT_H

File diff suppressed because it is too large Load Diff

View File

@ -1,797 +0,0 @@
/* -*- 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.
*/
#ifndef __Context_Device_Context_H
// Avoid include redundancy
//
#define __Context_Device_Context_H
// Purpose: Implement a Context which holds the common code for
// contexts which draw information.
// Comments: Use for those contexts with actual windows to display,
// or for printing. Basically those with a CDC on
// which to display and which handle output formats
// that go through layout or other engines.
// Revision History:
// 05-26-95 created GAB
//
// Required Includes
//
#include "cxstubs.h"
#include "ni_pixmp.h"
#include "prtypes.h"
#include "il_types.h"
#include "il_util.h"
#include "libimg.h"
#ifdef XP_WIN32
//#define DDRAW
#endif
#ifdef DDRAW
#include "ddraw.h"
#endif
// Constants
//
#define HIMETRIC_INCH 2540 // HIMETRIC units per inch
#define TWIPS_INCH 1440
#define MAX_IMAGE_PALETTE_ENTRIES 216
// DIBSECTIONS are pretty slow on most platforms except NT3.51
// We can use them if they're sped up in a later version of Windows
#define USE_DIB_SECTIONS 0
// Use for selection highlighting of objects in Editor
#define ED_SELECTION_BORDER 3
//#ifndef NO_TAB_NAVIGATION
typedef enum {
FE_DRAW_NORMAL = 0x00000000,
FE_DRAW_TAB_FOCUS = 0x00000001,
} feDrawFlag_t ;
//#endif /* NO_TAB_NAVIGATION */
void WFE_StretchDIBitsWithMask(HDC hTargetDC,
BOOL isDeviceDC,
HDC hOffscreenDC,
int dx,
int dy,
int dw,
int dh,
int sx,
int sy,
int sw,
int sh,
void XP_HUGE *imageBit,
BITMAPINFO* lpImageInfo,
void XP_HUGE *maskBit,
BOOL bUseDibPalColors = FALSE,
COLORREF fillWithBackground = NULL
);
// Structures
//
class LTRB {
public:
union {
int32 m_lLeft;
int32 left;
};
union {
int32 m_lTop;
int32 top;
};
union {
int32 m_lRight;
int32 right;
};
union {
int32 m_lBottom;
int32 bottom;
};
LTRB( LTRB& theRect) {
m_lLeft = theRect.m_lLeft;
m_lTop = theRect.m_lTop;
m_lRight = theRect.m_lRight;
m_lBottom = theRect.m_lBottom;
}
LTRB& operator = (LTRB& theRect) {
m_lLeft = theRect.m_lLeft;
m_lTop = theRect.m_lTop;
m_lRight = theRect.m_lRight;
m_lBottom = theRect.m_lBottom;
return *this;
}
void MergeRect(LTRB& theRect) {
if ( m_lLeft >theRect.m_lLeft)
m_lLeft = theRect.m_lLeft;
if (m_lTop > theRect.m_lTop)
m_lTop = theRect.m_lTop;
if (m_lRight < theRect.m_lRight)
m_lRight = theRect.m_lRight;
if (m_lBottom < theRect.m_lBottom)
m_lBottom = theRect.m_lBottom;
}
void Empty() {
m_lLeft = 0;
m_lTop = 0;
m_lRight = 0;
m_lBottom = 0;
}
BOOL IsEmpty() {
return( m_lLeft == 0 &&
m_lTop == 0 &&
m_lRight == 0 &&
m_lBottom == 0);
}
LTRB(int32 lLeft, int32 lTop, int32 lRight, int32 lBottom) {
m_lLeft = lLeft;
m_lTop = lTop;
m_lRight = lRight;
m_lBottom = lBottom;
}
LTRB() {
m_lLeft = m_lTop = m_lRight = m_lBottom = 0L;
}
int32 Width() {
return(m_lRight - m_lLeft);
}
int32 Height() {
return(m_lBottom - m_lTop);
}
void Inflate(int32 lDelta) {
m_lLeft -= lDelta;
m_lTop -= lDelta;
m_lRight += lDelta;
m_lBottom += lDelta;
}
void Inflate(int32 lDeltaX, int32 lDeltaY) {
m_lLeft -= lDeltaX;
m_lTop -= lDeltaY;
m_lRight += lDeltaX;
m_lBottom += lDeltaY;
}
};
class XY {
public:
union {
int32 m_lX;
int32 x;
};
union {
int32 m_lY;
int32 y;
};
XY(int32 lX, int32 lY) {
m_lX = lX;
m_lY = lY;
}
XY() {
m_lX = m_lY = 0L;
}
};
class CDCCX : public CStubsCX {
// Construction/Destruction
public:
CDCCX();
~CDCCX();
virtual void DestroyContext();
// CDC Access
private:
BOOL m_bOwnDC;
BOOL m_bClassDC;
protected:
void SetOwnDC(BOOL bSet) { m_bOwnDC = bSet; }
void SetClassDC(BOOL bSet) { m_bClassDC = bSet; }
protected:
HDC m_pImageDC;
IL_IRGB rgbTransparentColor;
IL_ColorSpace* curColorSpace;
IL_ColorMap *curColorMap;
public:
virtual HDC GetContextDC() = 0;
virtual void ReleaseContextDC(HDC hDC) = 0;
virtual HDC GetAttribDC() { return GetContextDC(); }
virtual void ReleaseAttribDC(HDC hDC) { ReleaseContextDC(hDC); }
virtual HDC GetDispDC() { return GetContextDC(); }
virtual void ReleaseDispDC(HDC hDC) { ReleaseContextDC(hDC); }
virtual BOOL IsDeviceDC() { return TRUE; }
virtual int32 GetXConvertUnit() { return m_lConvertX;}
virtual int32 GetYConvertUnit() { return m_lConvertY;}
IL_ColorSpace* GetCurrentColorSpace() { return curColorSpace;}
virtual BOOL IsOwnDC() const {
return(m_bOwnDC);
}
virtual BOOL IsClassDC() const {
return(m_bClassDC);
}
HDC GetImageDC() {
// Use this, a compatible DC, to size things to the display or for bitmaps
// to blt on the screen.
// Don't use to actually attempt display of anything.
return(m_pImageDC);
}
// Post construction initialization.
// Variables should be set by those deriving from this class at
// the appropriate times.
public:
// MWH - The usage for bInitialPalette and bNewMemDC flags -
// if bInitialPalette is set to FALSE, we will use the default palette that is created when the App started.
// otherwise a palette will be created.
// if bNewMemDC = TRUE, the the cache memory DC(m_pImageDC) will be created. Otherwise, it will be
// NULL. If you set bNewMemDC = FALSE, you should call PrepareDraw() before any drawing happen, and
// call EndDraw() when you are done with this CDCCX. When I'm working on Aurora, I find out that
// I need this flag. In Aurora, every button has an associate view, it gets created when the button
// is created. If the view has HTML pane, it will create a CDCCX. I need to control when to cache
// memory DC and when to destroy memory DC in order to use GDI resource efficiently under WIN16.
virtual void Initialize(BOOL bOwnDC, RECT *pRect = NULL, BOOL bInitialPalette = TRUE, BOOL bNewMemDC = TRUE);
virtual void PrepareDraw();
virtual void EndDraw();
int32 m_lOrgX;
int32 m_lOrgY;
int32 m_lWidth;
int32 m_lHeight;
int32 m_lDocHeight;
int32 m_lDocWidth;
#ifdef DDRAW
virtual LPDDSURFACEDESC GetSurfDesc() {return 0;}
virtual LPDIRECTDRAWSURFACE GetPrimarySurface() {return 0;}
virtual LPDIRECTDRAW GetDrawObj() {return 0;}
virtual LPDIRECTDRAWSURFACE GetBackSurface(){return 0;}
virtual void ReleaseSurfDC(LPDIRECTDRAWSURFACE surf, HDC hdc){;}
virtual void RestoreAllDrawSurface() {;}
virtual void SetClipOnDrawSurface(LPDIRECTDRAWSURFACE surface, HRGN hClipRgn) {;}
virtual LPDIRECTDRAWSURFACE CreateOffscreenSurface(RECT& rect) {return NULL;}
virtual void BltToScreen(LTRB& rect) {;}
virtual void LockOffscreenSurfDC(){;}
virtual void ReleaseOffscreenSurfDC() {;}
#endif
// Drawing conversions, informational.
protected:
// Hacks for speedup.
int32 m_lConvertX;
int32 m_lConvertY;
// What mapping mode we're in.
int m_MM;
HRGN curClipRgn;
public:
virtual int GetLeftMargin() {return 0;}
virtual int GetTopMargin() {return 0;}
// How to set the mapping mode.
void SetMappingMode(HDC hdc) {
if(MMIsText() == TRUE) {
::SetMapMode(hdc, MM_TEXT);
}
else {
::SetMapMode(hdc, MM_ANISOTROPIC);
::SetWindowExtEx(hdc, 1440,1440, NULL);
::SetViewportExtEx(hdc, ::GetDeviceCaps(hdc, LOGPIXELSX), ::GetDeviceCaps(hdc, LOGPIXELSY), NULL);
}
}
// Can opt for 1 to 1 conversions.
BOOL MMIsText() const {
return(m_MM == MM_TEXT);
}
int32 Pix2TwipsX(int32 lPixX) {
return(GetXConvertUnit() * lPixX);
}
int32 Twips2PixX(int32 lTwipsX) {
return(lTwipsX / m_lConvertX);
}
int32 Pix2TwipsY(int32 lPixY) {
return(GetYConvertUnit() * lPixY);
}
int32 Twips2PixY(int32 lTwipsY) {
return(lTwipsY / m_lConvertY);
}
int32 Metric2TwipsX(int32 lMetricX) {
// We use a screen DC to get WYSIWYG
CDC *pTempDC = theApp.m_pMainWnd->GetDC();
float convertPixX = ((float)HIMETRIC_INCH / (float)pTempDC->GetDeviceCaps(LOGPIXELSX));
theApp.m_pMainWnd->ReleaseDC(pTempDC);
// Convert the Metrics to pixels first.
lMetricX = (int32)((float)lMetricX / convertPixX);
// Complete the conversion to twips.
return(Pix2TwipsX(lMetricX));
}
int32 Metric2TwipsY(int32 lMetricY) {
// We use a screen DC to get WYSIWYG
CDC *pTempDC = theApp.m_pMainWnd->GetDC();
float convertPixY = ((float)HIMETRIC_INCH / (float)pTempDC->GetDeviceCaps(LOGPIXELSY));
theApp.m_pMainWnd->ReleaseDC(pTempDC);
// Convert the Metrics to pixels first.
lMetricY = (int32)((float)lMetricY / convertPixY);
// Complete the conversion to twips.
return(Pix2TwipsY(lMetricY));
}
int32 Twips2MetricX(int32 lTwipsX) {
// Convert the twips to pixels first.
lTwipsX = Twips2PixX(lTwipsX);
// We use a screen DC to get WYSIWYG
CDC *pTempDC = theApp.m_pMainWnd->GetDC();
float convertPixX = ((float)HIMETRIC_INCH / (float)pTempDC->GetDeviceCaps(LOGPIXELSX));
theApp.m_pMainWnd->ReleaseDC(pTempDC);
// Go metric.
lTwipsX = (int32)((float)lTwipsX * convertPixX);
return(lTwipsX);
}
int32 Twips2MetricY(int32 lTwipsY) {
// Convert the twips to pixels first.
lTwipsY = Twips2PixY(lTwipsY);
// We use a screen DC to get WYSIWYG
CDC *pTempDC = theApp.m_pMainWnd->GetDC();
float convertPixY = ((float)HIMETRIC_INCH / (float)pTempDC->GetDeviceCaps(LOGPIXELSY));
theApp.m_pMainWnd->ReleaseDC(pTempDC);
// Go metric.
lTwipsY = (int32)((float)lTwipsY * convertPixY);
return(lTwipsY);
}
int32 GetOriginX() {
return(m_lOrgX);
}
int32 GetOriginY() {
return(m_lOrgY);
}
int32 GetWidth() {
return(m_lWidth);
}
int32 GetHeight() {
return(m_lHeight);
}
int32 GetDocumentWidth() {
return(m_lDocWidth);
}
int32 GetDocumentHeight() {
return(m_lDocHeight);
}
void SetTransparentColor(BYTE red, BYTE green, BYTE blue);
IL_IRGB &GetTransparentColor() {return rgbTransparentColor;}
// Turning on or off display blocking.
private:
BOOL m_bResolveElements;
protected:
BOOL CanBlockDisplay() const {
return(m_bResolveElements);
}
public:
void DisableDisplayBlocking() {
m_bResolveElements = FALSE;
}
void EnableDisplayBlocking() {
m_bResolveElements = TRUE;
}
// Coordinate resolution and display blocking.
public:
virtual BOOL ResolveElement(LTRB& Rect, NI_Pixmap *pImage, int32 lX, int32 lY,
int32 orgx, int32 orgy,
uint32 ulWidth, uint32 ulHeight,
int32 lScaleWidth, int32 lScaleHeight);
virtual BOOL ResolveElement(LTRB& Rect, int32 x, int32 y, int32 x_offset, int32 y_offset,
int32 width, int32 height);
virtual BOOL ResolveElement(LTRB& Rect, LO_SubDocStruct *pSubDoc, int iLocation);
virtual BOOL ResolveElement(LTRB& Rect, LO_LinefeedStruct *pLineFeed, int iLocation);
virtual BOOL ResolveElement(LTRB& Rect, LO_CellStruct *pCell, int iLocation);
virtual BOOL ResolveElement(LTRB& Rect, LO_TableStruct *pTable, int iLocation);
virtual BOOL ResolveElement(LTRB& Rect, LO_EmbedStruct *pEmbed, int iLocation, Bool bWindowed);
virtual BOOL ResolveElement(LTRB& Rect, LO_FormElementStruct *pFormElement);
virtual BOOL ResolveElement(LTRB& Rect, LO_TextStruct *pText, int iLocation, int32 lStartPos, int32 lEndPos, int iClear);
// How to make sure above functions work on windows 16.
public:
void SafeSixteen(LTRB& Rect) {
// This routine is called to make sure that drawing coords don't wrap
// with GDI functions which take short ints.
// Use some hard coded values to end this pain quickly.
// Leave some marginal values to allow for additional leeway of
// the result (2767 twips).
// Maximum display height known is 1200 pixels, which is about 24000
// twips, which is kinda close for the future of this product.
// This doesn't count those users which somehow get their app much
// larger than the screen size by using other means, and they
// are dead.
const int iMax = 30000;
const int iMin = -30000;
if(Rect.left > iMax) {
Rect.left = iMax;
}
else if(Rect.left < iMin) {
Rect.left = iMin;
}
if(Rect.top > iMax) {
Rect.top = iMax;
}
else if(Rect.top < iMin) {
Rect.top = iMin;
}
if(Rect.right > iMax) {
Rect.right = iMax;
}
else if(Rect.right < iMin) {
Rect.right = iMin;
}
if(Rect.bottom > iMax) {
Rect.bottom = iMax;
}
else if(Rect.bottom < iMin) {
Rect.bottom = iMin;
}
}
// Font selection, deselection, caching
private:
enum {
m_MaxFontSizes = 9,
m_MaxUnderline = 2,
m_MaxItalic = 2,
m_MaxBold = 2,
m_MaxFixed = 2
};
private :
CPtrList m_cplCachedFontList;
protected:
HDC m_lastDCWithCachedFont;
CyaFont *m_pSelectedCachedFont;
int m_iOffset;
public:
static void ClearAllFontCaches();
void ClearFontCache();
virtual int SelectNetscapeFont( HDC hdc, LO_TextAttr *pAttr, CyaFont *& pMyFont);
virtual int SelectNetscapeFontWithCache( HDC hdc, LO_TextAttr *pAttr, CyaFont *& pMyFont );
virtual void ReleaseNetscapeFont(HDC hdc, CyaFont * pNetscapeFont);
virtual void ReleaseNetscapeFontWithCache(HDC hdc, CyaFont * pNetscapeFont);
virtual void ChangeFontOffset(int iIncrementor);
// Context sensitive attribute mapping.
public:
virtual COLORREF ResolveTextColor(LO_TextAttr *pAttr);
virtual COLORREF ResolveBGColor(unsigned uRed, unsigned uGreen, unsigned uBlue);
virtual BOOL ResolveHRSolid(LO_HorizRuleStruct *pHorizRule);
virtual BOOL ResolveLineSolid();
virtual void ResolveTransparentColor(unsigned uRed, unsigned uGreen, unsigned uBlue);
virtual COLORREF ResolveDarkLineColor();
virtual COLORREF ResolveLightLineColor();
virtual COLORREF ResolveBorderColor(LO_TextAttr *pAttr);
COLORREF ResolveLOColor(LO_Color *color);
virtual PRBool ResolveIncrementalImages();
#ifdef XP_WIN16
static void HugeFree(void XP_HUGE *pFreeMe) {
#ifdef __WATCOMC__
hfree(pFreeMe);
#else
_hfree(pFreeMe);
#endif
}
void XP_HUGE *HugeAlloc(int32 iSize, int32 iNum) {
#ifdef __WATCOMC__
return(halloc( (long) iSize, (size_t) iNum));
#else
return(_halloc( (long) iSize, (size_t) iNum));
#endif
}
#else
static void HugeFree(void XP_HUGE *pFreeMe) {
free(pFreeMe);
}
void XP_HUGE *HugeAlloc(int32 iSize, int32 iNum) {
return(calloc(iNum, iSize));
}
#endif
BOOL ResolveTextExtent(int16 wincsid, HDC pDC, LPCTSTR pString, int iLength, LPSIZE pSize, CyaFont *pMyFont);
BOOL ResolveTextExtent(HDC pDC, LPCTSTR pString, int iLength, LPSIZE pSize, CyaFont *pMyFont );
BOOL ResolveTextExtent(HDC pDC, LPCTSTR pString, int iLength, LPSIZE pSize)
{
BOOL bRetval;
bRetval = CIntlWin::GetTextExtentPoint(0, pDC, pString, iLength, pSize);
return(bRetval);
}
// Color and palette.
protected:
COLORREF m_rgbLightColor;
COLORREF m_rgbDarkColor;
HPALETTE m_pPal;
BOOL m_bRGB565; // driver supports 565 mode for DIBs
public:
virtual HPALETTE GetPalette() const;
COLORREF m_rgbBackgroundColor; // let our view access this
// Misc draw helpers
public:
virtual double CalcFontPointSize(int size, int iBaseSize, int iOffset = 0);
void Display3DBox(LTRB& Rect, COLORREF rgbLight, COLORREF rgbDark, int32 lWidth, BOOL bAdjust = FALSE);
void EditorDisplayZeroWidthBorder(LTRB& Rect, BOOL bSelected);
void Compute3DColors(COLORREF rgbColor, COLORREF &rgbLight, COLORREF &rgbDark);
// Returns width of selection border (if any) - used only by Composer
int32 DisplayTableBorder(LTRB& Rect, LO_TableStruct *pTable);
void Display3DBorder(LTRB& Rect, COLORREF rgbLight, COLORREF rgbDark, LTRB &);
BOOL cxLoadBitmap(LPCSTR pszBmName, char** bits, BITMAPINFOHEADER** myBitmapInfo);
virtual void DisplayIcon(int32 x, int32 y, int icon_number);
virtual void GetIconDimensions(int32* width, int32* height, int iconNumber);
void FloodRect(LTRB& Rect, HBRUSH hColor);
BOOL WriteBitmapFile(LPCSTR lpszFileName, LO_ImageStruct*);
HANDLE WriteBitmapToMemory( IL_ImageReq *image_req, LO_Color* bgColor);
BOOL CanWriteBitmapFile(LO_ImageStruct*);
// Uses the document color/backdrop by default, but you can specify a color or backdrop image to be used instead
virtual BOOL _EraseBkgnd(HDC pDC, RECT&, int32 tileX, int32 tileY,
LO_Color* bg = NULL);
void DisplaySelectionFeedback(uint16 ele_attrmask, const LTRB& rect);
void EraseToBackground(const LTRB& rect, int32 borderWidth = 0);
protected:
int m_iBitsPerPixel;
BOOL m_bUseDibPalColors;
public:
BOOL GetUseDibPalColors() {
return m_bUseDibPalColors;
}
int GetBitsPerPixel() {
return m_iBitsPerPixel;
}
void SetUseDibPalColors(BOOL flag) {
m_bUseDibPalColors = flag;
}
// Preference representations needed per context.
protected:
public:
// OLE Embed implementation.
private:
BOOL m_bAutoDeleteDocument;
protected:
CGenericDoc *m_pDocument;
public:
CGenericDoc *GetDocument() const {
return(m_pDocument);
}
void ClearDoc() {
m_pDocument = NULL;
}
void GetPluginRect(MWContext *pContext,
LO_EmbedStruct *pLayoutData,
RECT &rect, int iLocation,
BOOL windowed);
BOOL IsPluginFullPage(LO_EmbedStruct *pLayoutData);
BOOL ContainsFullPagePlugin();
// Document helpers.
public:
virtual BOOL OnOpenDocumentCX(const char *pPathName);
// URL retrieval
public:
virtual int GetUrl(URL_Struct *pUrl, FO_Present_Types iFormatOut, BOOL bReallyLoad = TRUE, BOOL bForceNew = FALSE);
// Function for easy creation of a URL from the current history entry.
public:
virtual URL_Struct *CreateUrlFromHist(BOOL bClearStateData = FALSE, SHIST_SavedData *pSavedData = NULL, BOOL bWysiwyg = FALSE);
// Image conditional loading.
private:
CString m_csForceLoadImage;
CString m_csNexttimeForceLoadImage;
BOOL m_bLoadImagesNow;
BOOL m_bNexttimeLoadImagesNow;
public:
void ExplicitlyLoadThisImage(const char *pImageUrl) {
m_csNexttimeForceLoadImage = pImageUrl;
NiceReload();
}
void ExplicitlyLoadAllImages() {
m_bNexttimeLoadImagesNow = TRUE;
NiceReload();
}
// Wether or not we exist in an OLE server....
private:
BOOL m_bOleServer;
public:
BOOL IsOleServer() const {
return(m_bOleServer);
}
void EnableOleServer();
void DisableOleServer() {
m_bOleServer = FALSE;
}
// Font for Form Text Entry
private:
friend class CFormElement;
enum {
m_FixedFont,
m_ProportionalFont
};
#if 0 /* dp */
int m_DownloadedFontList; // for testing
#endif /* 0 */
HFONT m_pFormFixFont;
HFONT m_pFormPropFont;
int m_iFormFixCSID; // csid for current form.
int m_iFormPropCSID; // csid for current form.
void ExtendCoord(LTRB &Rect);
virtual void GetDrawingOrigin(int32 *plOrgX, int32 *plOrgY)
{ *plOrgX = 0; *plOrgY = 0; }
virtual FE_Region GetDrawingClip()
{ return NULL; }
private :
void CDCCX::DrawTabFocusLine( HDC hdc, BOOL supportPixel, int x, int y, int x2, int y2);
void CDCCX::DrawTabFocusRect( HDC hdc, BOOL supportPixel, int left, int top, int right, int bottom);
void CDCCX::DrawRectBorder(LTRB& Rect, COLORREF rgbColor, int32 lWidth);
void CDCCX::DrawMapAreaBorder( int baseX, int baseY, lo_MapAreaRec * theArea );
// MFC Helpers; abstraction away
public:
virtual void ViewImages();
virtual BOOL CanViewImages();
// Context Overrides
virtual void DisplayBullet(MWContext *pContext, int iLocation, LO_BullettStruct *pBullet);
#ifndef MOZ_NGLAYOUT
virtual void DisplayEmbed(MWContext *pContext, int iLocation, LO_EmbedStruct *pEmbed);
#endif
virtual void DisplayBorder(MWContext *pContext, int iLocation, int x, int y, int width, int height, int bw, LO_Color *color, LO_LineStyle style);
virtual void DisplayHR(MWContext *pContext, int iLocation, LO_HorizRuleStruct *pHorizRule);
virtual BITMAPINFO* NewPixmap(NI_Pixmap* pImage, BOOL mask = FALSE);
virtual int DisplayPixmap(NI_Pixmap* image, NI_Pixmap* mask, int32 x, int32 y, int32 x_offset, int32 y_offset, int32 width, int32 height, int32 lScaleWidth, int32 lScaleHeight, LTRB& Rect);
virtual void DisplayLineFeed(MWContext *pContext, int iLocation, LO_LinefeedStruct *pLineFeed, XP_Bool clear);
virtual void DisplaySubDoc(MWContext *pContext, int iLocation, LO_SubDocStruct *pSubDoc);
virtual void DisplayCell(MWContext *pContext, int iLocation, LO_CellStruct *pCell);
virtual void DisplaySubtext(MWContext *pContext, int iLocation, LO_TextStruct *pText, int32 lStartPos, int32 lEndPos, XP_Bool clear);
virtual void DisplayTable(MWContext *pContext, int iLocation, LO_TableStruct *pTable);
// need to keep the old interface for calling from C
virtual void DisplayText(MWContext *pContext, int iLocation, LO_TextStruct *pText, XP_Bool clear);
void CDCCX::DisplayImageFeedback(MWContext *pContext, int iLocation, LO_Element *pElement, lo_MapAreaRec * theArea, uint32 drawFlag );
// /* cannot use default drawFlag = 0, if this function is called from C */
virtual void DisplayText(MWContext *pContext, int iLocation, LO_TextStruct *pText, XP_Bool clear, uint32 drawFlag );
// handle strike and under-line, after text is drawn.
virtual void CDCCX::DrawTextPostDecoration(HDC hdc, LO_TextAttr * attr, LTRB * Rect, COLORREF rgbColor );
virtual void DisplayWindowlessPlugin(MWContext *pContext, LO_EmbedStruct *pEmbed, NPEmbeddedApp *pEmbeddedApp, int iLocation);
virtual void DisplayPlugin(MWContext *pContext, LO_EmbedStruct *pEmbed, NPEmbeddedApp* pEmbeddedApp, int iLocation);
#ifdef LAYERS
virtual void EraseBackground(MWContext *pContext, int iLocation, int32 x, int32 y, uint32 width, uint32 height, LO_Color *pColor);
#endif
#ifndef MOZ_NGLAYOUT
virtual void FreeEmbedElement(MWContext *pContext, LO_EmbedStruct *pEmbed);
virtual void GetEmbedSize(MWContext *pContext, LO_EmbedStruct *pEmbed, NET_ReloadMethod bReload);
#endif /* MOZ_NGLAYOUT */
#ifdef LAYERS
virtual void GetTextFrame(MWContext *pContext, LO_TextStruct *pText,
int32 start, int32 end, XP_Rect *frame);
#endif
virtual int GetTextInfo(MWContext *pContext, LO_TextStruct *pText, LO_TextInfo *pTextInfo);
virtual void ImageComplete(NI_Pixmap* image);
virtual void LayoutNewDocument(MWContext *pContext, URL_Struct *pURL, int32 *pWidth, int32 *pHeight, int32 *pmWidth, int32 *pmHeight);
virtual void SetBackgroundColor(MWContext *pContext, uint8 uRed, uint8 uGreen, uint8 uBlue);
virtual COLORREF GetBackgroundColor() {return m_rgbBackgroundColor;}
virtual void Set3DColors( COLORREF crBackground );
static HPALETTE InitPalette(HDC hdc);
static HPALETTE CreateColorPalette(HDC hdc, IL_IRGB& transparentColor, int bitsPerPixel);
static void SetColormap(HDC hdc, NI_ColorMap *pMap, IL_IRGB& transparentColor, HPALETTE hPal);
virtual void SetDocDimension(MWContext *pContext, int iLocation, int32 lWidth, int32 lLength);
virtual void GetDocPosition(MWContext *pContext, int iLocation, int32 *lX_p, int32 *lY_p);
#ifndef MOZ_NGLAYOUT
virtual void DisplayFormElement(MWContext *pContext, int iLocation, LO_FormElementStruct *pFormElement);
virtual void FormTextIsSubmit(MWContext *pContext, LO_FormElementStruct *pFormElement);
virtual void GetFormElementInfo(MWContext *pContext, LO_FormElementStruct *pFormElement);
virtual void GetFormElementValue(MWContext *pContext, LO_FormElementStruct *pFormElement, XP_Bool bTurnOff, XP_Bool bSubmit);
virtual void ResetFormElement(MWContext *pContext, LO_FormElementStruct *pFormElement);
virtual void SetFormElementToggle(MWContext *pContext, LO_FormElementStruct *pFormElement, XP_Bool iState);
#endif
#ifdef TRANSPARENT_APPLET
virtual void DrawJavaApp(MWContext *pContext, int iLocation, LO_JavaAppStruct *pJava);
#endif
protected:
void StretchMaskBlt(HDC hTargetDC, HBITMAP theBitmap, HBITMAP theMask,
int32 dx, int32 dy, int32 dw, int32 dh,
int32 sx, int32 sy, int32 sw, int32 sh);
void StretchPixmap(HDC hTargetDC, NI_Pixmap* pImage,
int32 dx, int32 dy, int32 dw, int32 dh,
int32 sx, int32 sy, int32 sw, int32 sh);
virtual void _StretchDIBitsWithMask(HDC pDC,
int iDestX,
int iDestY,
int iDestWidth,
int iDestHeight,
int iSrcX,
int iSrcY,
int iSrcWidth,
int iSrcHeight,
NI_Pixmap *image,
NI_Pixmap *mask);
#ifdef DDRAW
BOOL TransparentBlt(int iDestX,
int iDestY,
int iDestWidth,
int iDestHeight,
int iSrcX,
int iSrcY,
int iSrcWidth,
int iSrcHeight,
NI_Pixmap *image,
COLORREF transColor,
LPDIRECTDRAWSURFACE surf);
#endif
BITMAPINFO* FillBitmapInfoHeader(NI_Pixmap* pImage);
HBITMAP CreateBitmap(HDC hTargetDC, NI_Pixmap *image);
HBITMAP CreateMask(HDC hTargetDC, NI_Pixmap* mask);
void TileImage(HDC hdc, LTRB& Rect, NI_Pixmap* image, NI_Pixmap* mask, int32 x, int32 y);
};
// Global functions
// Calculate a contrastng text and background colors to use for selection
// given a background color
void wfe_GetSelectionColors( COLORREF rgbBackgroundColor,
COLORREF* pTextColor, COLORREF* pBackColor);
// Global variables
//
// Macros
//
#endif // __Context_Device_Context_H

File diff suppressed because it is too large Load Diff

View File

@ -1,500 +0,0 @@
/* -*- 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.
*/
#include "stdafx.h"
#include "cxicon.h"
#include "feimage.h"
#include "winproto.h"
#include "helper.h"
HBITMAP CRDFImage::m_hBadImageBitmap = NULL;
int CRDFImage::refCount = 0;
CRDFImage::CRDFImage(const char * url)
{
m_nRefCount = 0;
pUrl = _strdup( url);
bmpInfo = NULL;
m_bCompletelyLoaded = FALSE;
m_bFrameLoaded = FALSE;
bits = 0;
maskbits = 0;
m_BadImage = FALSE;
CRDFImage::refCount++;
iconContext = NULL;
pairCount = 0;
}
CRDFImage::~CRDFImage()
{
// XP_FREE( bmpInfo);
// CDCCX::HugeFree(bits);
// CDCCX::HugeFree(maskbits);
free(pUrl);
CRDFImage::refCount--;
if (refCount == 0)
{
if (CRDFImage::m_hBadImageBitmap)
VERIFY(::DeleteObject(CRDFImage::m_hBadImageBitmap));
}
}
void CRDFImage::AddListener(CCustomImageObject* pObject, HT_Resource r)
{
// We only want to have one copy of the same image in this list.
for (POSITION pos = resourceList.GetHeadPosition();
pos != NULL; )
{
// Enumerate over the list and call remove listener on each image.
CIconCallbackInfo* pInfo = (CIconCallbackInfo*)resourceList.GetNext(pos);
if (pInfo->pObject == pObject &&
pInfo->pResource == r)
return; // We're already listening for this resource.
}
// Add a listener.
CIconCallbackInfo* iconCallbackInfo = new CIconCallbackInfo(pObject, r);
resourceList.AddHead(iconCallbackInfo);
pObject->AddLoadingImage(this);
m_nRefCount++;
if (iconContext == NULL)
{
// Kick off the load.
ProcessIcon();
}
}
void CRDFImage::RemoveListener(CCustomImageObject *pObject)
{
// Listener has been destroyed. Need to get all references to it out of the list.
// Just do this by NULLing out the pObject field of the iconcallbackinfo structs.
for (POSITION pos = resourceList.GetHeadPosition();
pos != NULL; )
{
CIconCallbackInfo* pInfo = (CIconCallbackInfo*)resourceList.GetNext(pos);
if (pInfo->pObject == pObject)
{
pInfo->pObject = NULL;
m_nRefCount--;
if (m_nRefCount == 0 && iconContext)
{
iconContext->Interrupt();
DestroyContext();
return;
}
}
}
}
void CRDFImage::RemoveListenerForSpecificResource(CCustomImageObject *pObject, HT_Resource r)
{
// Listener has been destroyed. Need to get all references to it out of the list.
// Just do this by NULLing out the pObject field of the iconcallbackinfo structs.
for (POSITION pos = resourceList.GetHeadPosition();
pos != NULL; )
{
CIconCallbackInfo* pInfo = (CIconCallbackInfo*)resourceList.GetNext(pos);
if (pInfo->pObject == pObject && pInfo->pResource == r)
{
pInfo->pObject = NULL;
m_nRefCount--;
if (m_nRefCount == 0 && iconContext)
{
iconContext->Interrupt();
DestroyContext();
return;
}
}
}
}
void CRDFImage::DestroyContext()
{
if (iconContext)
{
iconContext->DeleteContextDC();
iconContext->NiceDestruction();
iconContext = NULL;
}
resourceList.RemoveAll();
}
BOOL CRDFImage::FrameLoaded()
{
return (m_bFrameLoaded);
}
BOOL CRDFImage::FrameSuccessfullyLoaded()
{
return (m_bFrameLoaded && bits);
}
BOOL CRDFImage::CompletelyLoaded()
{
return m_bCompletelyLoaded;
}
void Icon_GetUrlExitRoutine(URL_Struct *pUrl, int iStatus, MWContext *pContext)
{
// Report any errors.
if(iStatus < 0 && pUrl->error_msg != NULL)
{
void* pData;
CRDFImage* theImage = NULL;
if (CHTFEData::m_CustomURLCache.Lookup(pUrl->address, pData))
theImage = (CRDFImage*)pData;
if (theImage)
{ // Since we cannot load this url, replace it with a bad image.
theImage->m_BadImage = TRUE;
theImage->bits = 0;
theImage->maskbits = 0;
theImage->bmpInfo = 0;
if (!CRDFImage::m_hBadImageBitmap)
CRDFImage::m_hBadImageBitmap = ::LoadBitmap(AfxGetResourceHandle(), MAKEINTRESOURCE(IDB_IMAGE_BAD));
theImage->CompleteCallback();
}
}
// standard free-a-URL-with-Windows-DDE-gunk mechanism:
if (NCAPIDATA(pUrl))
NCAPIDATA(pUrl)->EndProgress();
if (!NCAPIDATA(pUrl) || NCAPIDATA(pUrl)->CanFreeUrl()) {
FEU_DeleteUrlData(pUrl, NULL);
NET_FreeURLStruct(pUrl);
}
}
static BOOL IsImageMimeType(const CString& theFormat)
{
BOOL val = FALSE;
if (theFormat.CompareNoCase(IMAGE_GIF) == 0)
val = TRUE;
else if (theFormat.CompareNoCase(IMAGE_JPG) == 0)
val = TRUE;
else if (theFormat.CompareNoCase(IMAGE_PJPG) == 0)
val = TRUE;
else if (theFormat.CompareNoCase(IMAGE_PPM) == 0)
val = TRUE;
else if (theFormat.CompareNoCase(IMAGE_PNG) == 0)
val = TRUE;
else if (theFormat.CompareNoCase(IMAGE_XBM) == 0)
val = TRUE;
else if (theFormat.CompareNoCase(IMAGE_XBM2) == 0)
val = TRUE;
else if (theFormat.CompareNoCase(IMAGE_XBM3) == 0)
val = TRUE;
return val;
}
static BOOL ValidNSBitmapFormat(char* extension)
{
CPtrList* allHelpers = &(CHelperApp::m_cplHelpers);
for (POSITION pos = allHelpers->GetHeadPosition(); pos != NULL;)
{
CHelperApp* app = (CHelperApp*)allHelpers->GetNext(pos);
CString helperMime(app->cd_item->ci.type);
if (IsImageMimeType(helperMime))
{
if (app->cd_item->num_exts > 0)
{
for (int i = 0; i < app->cd_item->num_exts; i++)
{
CString extString(app->cd_item->exts[i]);
if (extString == &extension[1])
return TRUE;
}
}
}
}
return FALSE;
}
void CRDFImage::ProcessIcon()
{
char *ext = FE_FindFileExt(pUrl);
if (!ext) return;
if (ValidNSBitmapFormat(ext))
{
// If there is no context, create one for processing the image.
hSubDC = ::CreateCompatibleDC(NULL);
if (iconContext == NULL)
{
iconContext = new CXIcon(this);
iconContext->SubstituteDC(hSubDC);
iconContext->Initialize(FALSE, NULL, FALSE);
iconContext->SetUseDibPalColors(FALSE);
}
// Temporary hack to disable loading RDF images for the layout integration
// build.
#ifndef MOZ_NGLAYOUT
// Ask for this via client pull.
// We may be in the call stack of the image lib, and doing
// lots of fast small get urls causes it to barf due
// to list management not being reentrant.
FEU_ClientPull(iconContext->GetContext(), 0, NET_CreateURLStruct(pUrl, NET_DONT_RELOAD), FO_CACHE_AND_PRESENT, FALSE);
#endif
}
else
{ // handle window internal format BMP
CString extension = ext;
if (extension.CompareNoCase(".bmp"))
{
}
else
{
// TODO: Error handling here, unknow bitmap format.
}
}
}
void CRDFImage::CompleteCallback()
{
m_bCompletelyLoaded = TRUE;
m_bFrameLoaded = TRUE;
while (!resourceList.IsEmpty())
{
CIconCallbackInfo* callback = (CIconCallbackInfo*)(resourceList.RemoveHead());
if (callback->pObject)
{
callback->pObject->LoadComplete(callback->pResource);
callback->pObject->RemoveLoadingImage(this);
}
delete callback;
}
DestroyContext();
}
void CRDFImage::CompleteFrameCallback()
{
m_bFrameLoaded = TRUE;
for (POSITION pos = resourceList.GetHeadPosition(); pos != NULL; )
{
CIconCallbackInfo* callback = (CIconCallbackInfo*)(resourceList.GetNext(pos));
if (callback->pObject)
{
callback->pObject->LoadComplete(callback->pResource);
}
}
}
CXIcon::CXIcon(CRDFImage* theImage)
{
MWContext *pContext = GetContext();
m_cxType = IconCX;
pContext->type = MWContextIcon;
m_MM = MM_TEXT;
m_hDC = 0;
m_icon = theImage;
m_image = NULL;
m_mask = NULL;
}
CXIcon::~CXIcon()
{
}
BITMAPINFO * CXIcon::NewPixmap(NI_Pixmap *pImage, BOOL isMask)
{
// remember which bitmap we have so we can get the bits later in imageComplete.
if (isMask)
m_mask = pImage;
else m_image = pImage;
return CDCCX::NewPixmap(pImage, isMask);
}
int CXIcon::DisplayPixmap(NI_Pixmap* image, NI_Pixmap* mask, int32 x, int32 y, int32 x_offset, int32 y_offset, int32 width, int32 height, int32 lScaleWidth, int32 lScaleHeight, LTRB& Rect)
{
/*
if (m_image)
{
CDCCX::HugeFree(m_image->bits);
m_image->bits = NULL;
FEBitmapInfo *imageInfo = (FEBitmapInfo*)m_image->client_data;
delete imageInfo;
m_image->client_data = NULL;
m_image = NULL;
}
if (m_mask)
{
CDCCX::HugeFree(m_mask->bits);
m_mask->bits = NULL;
FEBitmapInfo *imageInfo = (FEBitmapInfo*)m_mask->client_data;
delete imageInfo;
m_mask->client_data = NULL;
m_mask = NULL;
}
*/
if (m_icon->bits)
{
// Free the old pixmap to make way for the new.
CDCCX::HugeFree(m_icon->bits);
m_icon->bits = NULL;
}
if (m_icon->maskbits)
{
// Free the old mask to make way for the new.
CDCCX::HugeFree(m_icon->maskbits);
m_icon->maskbits = NULL;
}
if (m_icon->bmpInfo)
{
XP_FREE(m_icon->bmpInfo);
m_icon->bmpInfo = NULL;
}
// Get the new pixmap.
m_image = image;
m_mask = mask;
// Fill in our header.
m_icon->bmpInfo = FillBitmapInfoHeader(image);
if (!m_icon->bmpInfo)
return 1;
// Copy our bits if we have any.
if (m_image->bits)
{
FEBitmapInfo* imageInfo = (FEBitmapInfo*) m_image->client_data;
BITMAPINFOHEADER* header = (BITMAPINFOHEADER*)imageInfo->bmpInfo;
m_icon->bits = HugeAlloc(header->biSizeImage, 1);
memcpy( m_icon->bits, m_image->bits, header->biSizeImage );
}
if (mask && m_mask->bits)
{
FEBitmapInfo* imageInfo = (FEBitmapInfo*) m_mask->client_data;
BITMAPINFOHEADER* header = (BITMAPINFOHEADER*)imageInfo->bmpInfo;
m_icon->maskbits = HugeAlloc(header->biSizeImage, 1);
memcpy( m_icon->maskbits, m_mask->bits, header->biSizeImage );
}
m_icon->CompleteFrameCallback();
return 1;
}
void CXIcon::ImageComplete(NI_Pixmap* image)
{
// Will get a call for both the mask and for the image.
if (m_image && m_mask)
{
m_icon->pairCount++;
if (m_icon->pairCount == 2)
m_icon->CompleteCallback();
}
else
{
// We have no mask.
m_icon->CompleteCallback();
}
}
// Don't display partial images.
void CXIcon::AllConnectionsComplete(MWContext *pContext)
{
CDCCX::AllConnectionsComplete(pContext);
}
void CXIcon::NiceDestruction()
{
m_bIdleDestroy = TRUE;
FEU_RequestIdleProcessing(GetContext());
}
// ========================= CCustomImageObject Helpers =============================
CRDFImage* CCustomImageObject::LookupImage(const char* url, HT_Resource r)
{
// Find the image.
void* pData;
CRDFImage* pImage = NULL;
if (CHTFEData::m_CustomURLCache.Lookup(url, pData))
{
pImage = (CRDFImage*)pData;
// Add ourselves to the callback list if the image hasn't completely loaded.
if (!pImage->CompletelyLoaded())
{
// The image is currently loading. Register ourselves with the image so that we will get called
// when the image finishes loading.
pImage->AddListener(this, r);
}
}
else
{
// Create a new NavCenter image.
pImage = new CRDFImage(url);
pImage->AddListener(this, r);
CHTFEData::m_CustomURLCache.SetAt(url, pImage);
}
return pImage;
}
CCustomImageObject::~CCustomImageObject()
{
// The displayer of the image is being destroyed. It should be removed as a listener from all
// images.
for (POSITION pos = loadingImagesList.GetHeadPosition();
pos != NULL; )
{
// Enumerate over the list and call remove listener on each image.
CRDFImage* pImage = (CRDFImage*)loadingImagesList.GetNext(pos);
pImage->RemoveListener(this);
}
}
void CCustomImageObject::AddLoadingImage(CRDFImage* pImage)
{
// We only want to have one copy of the same image in this list.
for (POSITION pos = loadingImagesList.GetHeadPosition();
pos != NULL; )
{
// Enumerate over the list and call remove listener on each image.
CRDFImage* pNavImage = (CRDFImage*)loadingImagesList.GetNext(pos);
if (pNavImage == pImage)
return;
}
// Add the image to the list.
loadingImagesList.AddHead(pImage);
}
void CCustomImageObject::RemoveLoadingImage(CRDFImage* pImage)
{
// Should only occur once in our list. Find and remove.
POSITION pos = loadingImagesList.Find(pImage);
if (pos)
loadingImagesList.RemoveAt(pos);
}

View File

@ -1,127 +0,0 @@
/* -*- 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.
*/
#ifndef CXIcon_H
#define CXIcon_H
#include "cxdc.h"
void Icon_GetUrlExitRoutine(URL_Struct *pUrl, int iStatus, MWContext *pContext);
class CXIcon;
class CCustomImageObject
{
protected:
CPtrList loadingImagesList; // A list of images that this window is still waiting for.
public:
virtual void LoadComplete(HT_Resource r) = 0;
virtual CRDFImage* LookupImage(const char* url, HT_Resource r);
virtual ~CCustomImageObject();
virtual void AddLoadingImage(CRDFImage* pImage);
virtual void RemoveLoadingImage(CRDFImage* pImage);
};
struct CIconCallbackInfo
{
HT_Resource pResource;
CCustomImageObject* pObject;
CIconCallbackInfo(CCustomImageObject* pObj, HT_Resource pRes)
:pObject(pObj), pResource(pRes) {}
};
class CRDFImage
{
public:
char *pUrl; // The URL at which the image can be found.
BOOL m_bCompletelyLoaded; // Whether or not the image has completely finished loading.
BOOL m_bFrameLoaded; // Whether or not a single frame of the image is available yet.
// (Lets you know whether or not you can start drawing something.)
BITMAPINFO *bmpInfo; // The current bits of the image.
void XP_HUGE *bits;
void XP_HUGE *maskbits;
HDC hSubDC;
BOOL m_BadImage; // Whether or not to use the bad image bitmap.
static HBITMAP m_hBadImageBitmap; // A bitmap to use if the image is not obtainable.
static int refCount; // A reference counter for the total # of RDF images that currently exist.
CXIcon* iconContext; // The context that is performing the load.
CPtrList resourceList; // The observers of this image.
int m_nRefCount; // The # of observers.
int pairCount; // Specifies whether or not the mask and the image bits are ready.
public:
CRDFImage(const char * pUrl);
virtual ~CRDFImage();
void ProcessIcon();
void CompleteCallback();
void CompleteFrameCallback();
BOOL FrameLoaded(); // Whether or not a single frame is ready (either good or bad).
BOOL FrameSuccessfullyLoaded(); // Whether or not a good frame is ready.
BOOL CompletelyLoaded(); // Whether or not the entire image is ready (either good or bad).
void DestroyContext();
void RemoveListener(CCustomImageObject* pObject);
void RemoveListenerForSpecificResource(CCustomImageObject *pObject, HT_Resource r);
void AddListener(CCustomImageObject* pObject, HT_Resource r);
};
class CXIcon : public CDCCX {
public:
CXIcon(){}
CXIcon(CRDFImage* image);
virtual ~CXIcon();
private:
CPtrList imageList;
HDC m_hDC;
NI_Pixmap* m_image;
NI_Pixmap* m_mask;
CRDFImage* m_icon;
public:
virtual HDC GetContextDC() { return m_hDC; }
void SubstituteDC(HDC hdc) { m_hDC = hdc; }
virtual BOOL IsDeviceDC() { return TRUE; }
virtual HDC GetAttribDC() { return m_hDC; }
virtual BITMAPINFO *NewPixmap(NI_Pixmap *pImage, BOOL mask);
void DeleteContextDC() { DeleteDC(m_hDC); }
void ReleaseContextDC(HDC pDC) {}
virtual void ImageComplete(NI_Pixmap* image);
// Don't display partial images.
virtual void AllConnectionsComplete(MWContext *pContext);
void NiceDestruction();
virtual int DisplayPixmap(NI_Pixmap* image, NI_Pixmap* mask, int32 x, int32 y, int32 x_offset, int32 y_offset, int32 width, int32 height, int32 lScaleWidth, int32 lScaleHeight, LTRB& Rect);
};
#endif

View File

@ -1,72 +0,0 @@
/* -*- 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.
*/
#include "stdafx.h"
#include "dialog.h"
/*----------------------------------------------------------------------**
** Hack alert. **
** The following code is needed so that backend libraries can perform **
** a small set of operations before we are initialized. **
** In specific, the fortezza security lib may call FE_PromptPassword **
** via the context function table before we ever have finished creating **
** a window. **
**----------------------------------------------------------------------*/
char *sux_PromptPassword(MWContext *pContext, const char *pMessage) {
char *pRetval = NULL;
char *pWinMessage = FE_Windowsify(pMessage);
if(pWinMessage) {
CDialogPASS dlgPass;
theApp.m_splash.SafeHide();
pRetval = dlgPass.DoModal(pWinMessage);
XP_FREE(pWinMessage);
}
return(pRetval);
}
MWContext *FE_GetInitContext(void) {
static MWContext *pCX = NULL;
static _ContextFuncs sFux;
static MWContext sCX;
// First time through, init context.
// Note, it should only set up the information
// needed to get the back end libraries by.
// It should not be added to the global context
// list or be routed through any of the CAbstractCX
// derived classes. ETC.
if(pCX == NULL) {
memset(&sCX, 0, sizeof(sCX));
memset(&sFux, 0, sizeof(sFux));
// Set up required functions.
sFux.PromptPassword = sux_PromptPassword;
// Fill in the context.
sCX.funcs = &sFux;
pCX = &sCX;
}
return(pCX);
}

View File

@ -1,174 +0,0 @@
/* -*- 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.
*/
#include "stdafx.h"
#include "cxmeta.h"
// The purpose of this file is to output a load to a DC.
// The name MetaFile is just a term, the DC need not be a MetaFileDC.
// If however, the DC passed in is a MetaFile DC, then all setup of DC
// must occur outside of this code.
// Further, the DC must remain valid throughout the course of the load.
// It may be more easier for you to derive from this class and handle creation
// and destruction of your DC therein.
// Indirect construction of the Class which loads a URL and
// returns the context ID, 0 on failure.
// Calling code can track when the MetaFile is finished, by realizing
// when the context ID is no longer found in the context list.
DWORD CMetaFileCX::MetaFileAnchorObject(CDC * pMetaFileDC, SIZE& pSize, URL_Struct *pUrl)
{
// Create a new object.
CMetaFileCX *pDontCare = new CMetaFileCX(pMetaFileDC, pSize, pUrl);
if(pDontCare != NULL) {
// The return value is!
DWORD dwID = pDontCare->GetContextID();
// Load the URL.
pDontCare->GetUrl(pUrl, FO_CACHE_AND_PRESENT);
// Success as far as we are concerned.
return(dwID);
}
// Failure.
return(0);
}
// Construct the class.
CMetaFileCX::CMetaFileCX(CDC* pMetaFileDC, SIZE& pSize, URL_Struct *pUrl)
{
TRACE("Creating CMetaFileCX %p\n", this);
// Set the context type.
m_cxType = MetaFile;
GetContext()->type = MWContextMetaFile;
// this is a hack to save the layout data for embedlist. For embed layout will
// make a copy of the pSavedData. We need to free the memory here.
m_embedList = (lo_SavedEmbedListData*)pUrl->savedData.EmbedList;
// Initialize the class members.
m_pMetaFileDC = NULL;
m_csViewport.cx = m_csViewport.cy = 0;
// Set them.
m_pMetaFileDC = pMetaFileDC;
ASSERT(m_pMetaFileDC);
m_csViewport = pSize;
ASSERT(m_csViewport.cx != 0 && m_csViewport.cy != 0);
// Should be able to initialize ourselves safely now.
Initialize(TRUE);
}
// We are now destroyed.
// Callers can tell when we've gone away by checking for our context ID
// in the list of all contexts -- Returned by MetaFileAnchorObject.
CMetaFileCX::~CMetaFileCX()
{
TRACE("Destroying CMetaFileCX %p\n", this);
// MWH - this is a hack to free the embed list that layout make copy from the original
// SavedData. I removed the freeing from lib\layout\layfree.c lo_FreeDocumentEmbedListData.
// and free the data here. This will fix an OLE printing problem. The problem is when a .doc file
// is on the net, i.e. http://....//xxx.doc. When layout free the EmbedList in
// lo_FreeDocumentEmbedListData will cause the page not printed. Since for printing we need
// to use the cached data.
if (m_embedList && (m_embedList->embed_data_list != NULL)) {
int32 i;
lo_EmbedDataElement* embed_data_list;
PA_LOCK(embed_data_list, lo_EmbedDataElement*, m_embedList->embed_data_list);
for (i=0; i < m_embedList->embed_count; i++)
{
if (embed_data_list[i].freeProc && embed_data_list[i].data)
(*(embed_data_list[i].freeProc))(GetContext(), embed_data_list[i].data);
}
PA_UNLOCK(m_embedList->embed_data_list);
PA_FREE(m_embedList->embed_data_list);
m_embedList->embed_count = 0;
m_embedList->embed_data_list = NULL;
}
}
// Returns the DC for this context.
HDC CMetaFileCX::GetContextDC()
{
return(m_pMetaFileDC->GetSafeHdc());
}
// Releases the DC for this context.
// Since the DC is static, there is no need to really do anything fancy here.
void CMetaFileCX::ReleaseContextDC(HDC pDC)
{
}
// Initializes the context for work after all the members are set.
// We leave the DC as persistant, as it doesn't really change while we're doing
// this (it better!).
void CMetaFileCX::Initialize(BOOL bOwnDC, RECT *pRect, BOOL bInitialPalette, BOOL bNewMemDC)
{
// We're going to use MM_TEXT for simplicity sake.
// Another reason, is simply, that on 16 bit windows, all the GDI functions
// take 16 bit ints, which wrap if the page gets too long.
// The page will be increadibly long, since this is a metafile, and this
// will prolong the wrapping.
m_MM = MM_TEXT;
// Set our width and height to that specified in the constructor.
m_lWidth = Twips2PixX(Metric2TwipsX(m_csViewport.cx));
m_lHeight = Twips2PixY(Metric2TwipsY(m_csViewport.cy));
TRACE("Metafile width is %ld\n", m_lWidth);
TRACE("Metafile height is %ld\n", m_lHeight);
// Call the base.
CDCCX::Initialize(bOwnDC, pRect, bInitialPalette, bNewMemDC);
}
// A new document is starting to be laid out.
// Inform layout of our dimensions, etc.
void CMetaFileCX::LayoutNewDocument(MWContext *pContext, URL_Struct *pURL, int32 *pWidth, int32 *pHeight, int32 *pmWidth, int32 *pmHeight)
{
// Turn off all display blocking, since we allow the metafile to
// be the full representation of a document.
DisableDisplayBlocking();
// Call the base
CDCCX::LayoutNewDocument(pContext, pURL, pWidth, pHeight, pmWidth, pmHeight);
}
// The load is finished for all intents and purposes.
// Get rid of ourselves.
void CMetaFileCX::AllConnectionsComplete(MWContext *pContext)
{
// Call the base.
CDCCX::AllConnectionsComplete(pContext);
// We're done.
DestroyContext();
}
// Do not allow incremental image display.
PRBool CMetaFileCX::ResolveIncrementalImages()
{
return(PR_FALSE);
}

View File

@ -1,64 +0,0 @@
/* -*- 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.
*/
#ifndef MetaFileContext__H
#define MetaFileContext__H
// Deriving from CDCCX
#include "cxdc.h"
class CMetaFileCX : public CDCCX {
// construction, destructions, indirect construction
public:
CMetaFileCX(CDC* pMetaFileDC, SIZE& pSize, URL_Struct *pUrl);
~CMetaFileCX();
static DWORD MetaFileAnchorObject(CDC *pMetaFileDC, SIZE& pSize, URL_Struct *pUrl);
// CDC Access.
private:
CDC *m_pMetaFileDC;
lo_SavedEmbedListData* m_embedList; /* to save the savedData from the URL struct.*/
public:
virtual HDC GetContextDC();
virtual BOOL IsDeviceDC() {return TRUE;}
virtual HDC GetAttribDC() {return m_pMetaFileDC->m_hAttribDC;}
virtual void ReleaseContextDC(HDC pDC);
// The size of the viewport which we'll be formatting layout to.
protected:
SIZE m_csViewport;
// Post Initialization
public:
virtual void Initialize(BOOL bOwnDC, RECT *pRect = NULL, BOOL bInitialPalette = TRUE, BOOL bNewMemDC = TRUE);
// Context sensitive attribute mapping.
public:
virtual PRBool ResolveIncrementalImages();
// Overrides
public:
// All connections complete.
virtual void AllConnectionsComplete(MWContext *pContext);
// Layout initialization respecting page size.
virtual void LayoutNewDocument(MWContext *pContext, URL_Struct *pURL, int32 *pWidth, int32 *pHeight, int32 *pmWidth, int32 *pmHeight);
};
#endif // MetaFileContext__H

View File

@ -1,733 +0,0 @@
/* -*- 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.
*/
// network.cpp : implementation file
//
#include "stdafx.h"
#include "cxnet1.h"
/////////////////////////////////////////////////////////////////////////////
// Context functions
XP_Bool CNetworkCX::Confirm(MWContext *pContext, const char *pConfirmMessage) {
// Always return true, we don't want any dialogs coming up.
// Don't call the base.
// This will cause the prompt functions to be called multiple times as
// needed since both the netlib and this object cache different
// passwords.
return(TRUE);
}
void CNetworkCX::Alert(MWContext *pContext, const char *pMessage) {
// Hand over this in the error string, even if it's not an error.
// Can't have dialogs popping up everywhere.
m_lFlags |= m_ERRS;
m_csErrorMessage = pMessage;
// Do not call the base or a dialog comes up.
}
char *CNetworkCX::Prompt(MWContext *pContext, const char *pPrompt, const char *pDefault) {
// So, LJM tells me that this function is used to query for a username.
// Do that here.
// Only if not already asked for during this load.
if((m_lFlags & m_USER) == 0) {
SetUsernameRequested();
return(AllocUsername());
}
return(NULL);
}
char *CNetworkCX::PromptPassword(MWContext *pContext, const char *pMessage) {
// The caller should have proactively set the password before an Open().
// If not, then they will have to figure it out.
// Mark that a password was required for the transfer.
// Only if not already asked for during this load.
if((m_lFlags & m_PASS) == 0) {
SetPasswordRequested();
return(AllocPassword());
}
return(NULL);
}
XP_Bool CNetworkCX::PromptUsernameAndPassword(MWContext *pContext, const char *pMessage, char **ppUsername, char **ppPassword) {
// Initialize.
*ppPassword = NULL;
*ppUsername = NULL;
// If both have already been asked for, don't continue.
if((m_lFlags & m_USER) != 0 && (m_lFlags & m_PASS) != 0) {
return(FALSE);
}
// Prompt for both username and password.
// Default values are given, and if not already specified by the caller, then we can just use them.
// Set that both a username and a password were required for the transfer.
SetPasswordRequested();
SetUsernameRequested();
// Copy and set any user/password values that the controller has preemptively set.
char *pPass = AllocPassword();
if(pPass != NULL) {
*ppPassword = pPass;
}
char *pUser = AllocUsername();
if(pUser != NULL) {
*ppUsername = pUser;
}
return(TRUE);
}
XP_Bool CNetworkCX::ShowAllNewsArticles(MWContext *pContext) {
// Set to show all the news articles.
return(GetFlagShowAllNews());
}
XP_Bool CNetworkCX::UseFancyFTP(MWContext *pContext) {
// Check to see if we are to use Fancy FTP.
return(GetFlagFancyFTP());
}
XP_Bool CNetworkCX::UseFancyNewsgroupListing(MWContext *pContext) {
// See if we should use full newsgroup listings with descriptions.
return(GetFlagFancyNews());
}
#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CNetworkCX
#ifndef _AFXDLL
#undef new
#endif
IMPLEMENT_DYNCREATE(CNetworkCX, CCmdTarget)
#ifndef _AFXDLL
#define new DEBUG_NEW
#endif
CNetworkCX::CNetworkCX()
{
EnableAutomation();
// To keep the application running as long as an OLE automation
// object is active, the constructor calls AfxOleLockApp.
AfxOleLockApp();
// Set the type of context that we are.
m_cxType = Network;
GetContext()->type = MWContextOleNetwork;
// Initialize our URL property, other members won't work unless this is defined.
m_pUrlData = NULL;
// Our buffer is initially empty.
ASSERT(m_cplBuffers.IsEmpty());
// We're done loading any stream, as none have started.
m_bStreamComplete = TRUE;
// We don't want to initially show all news articles.
m_bShowAllNews = FALSE;
// We do want to use Fancy News and Fancy FTP by default.
m_bFancyNews = TRUE;
m_bFancyFTP = TRUE;
// We've no current status flags.
m_lFlags = m_OK;
// Username and password should be empty initially anyhow.
TRACE("Netscape.Network.1 started\n");
}
CNetworkCX::~CNetworkCX()
{
// To terminate the application when all objects created with
// with OLE automation, the destructor calls AfxOleUnlockApp.
AfxOleUnlockApp();
TRACE("Netscape.Network.1 ended\n");
}
void CNetworkCX::OnFinalRelease()
{
// When the last reference for an automation object is released
// OnFinalRelease is called. This implementation deletes the
// object. Add additional cleanup required for your object before
// deleting it from memory.
// If we have a currently loading stream, we need to do cleanup there.
if(m_pUrlData != NULL) {
Close();
}
DestroyContext();
}
char *CNetworkCX::AllocUsername() {
// See if we even have a username to allocate.
if(m_csUsername.IsEmpty() == TRUE) {
return(NULL);
}
return(XP_STRDUP(m_csUsername));
}
char *CNetworkCX::AllocPassword() {
// See if we even have a password to allocate.
if(m_csPassword.IsEmpty() == TRUE) {
return(NULL);
}
return(XP_STRDUP(m_csPassword));
}
BEGIN_MESSAGE_MAP(CNetworkCX, CCmdTarget)
//{{AFX_MSG_MAP(CNetworkCX)
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BEGIN_DISPATCH_MAP(CNetworkCX, CCmdTarget)
//{{AFX_DISPATCH_MAP(CNetworkCX)
DISP_PROPERTY_EX(CNetworkCX, "Username", GetUsername, SetUsername, VT_BSTR)
DISP_PROPERTY_EX(CNetworkCX, "Password", GetPassword, SetPassword, VT_BSTR)
DISP_PROPERTY_EX(CNetworkCX, "FlagShowAllNews", GetFlagShowAllNews, SetFlagShowAllNews, VT_BOOL)
DISP_PROPERTY_EX(CNetworkCX, "FlagFancyFTP", GetFlagFancyFTP, SetFlagFancyFTP, VT_BOOL)
DISP_PROPERTY_EX(CNetworkCX, "FlagFancyNews", GetFlagFancyNews, SetFlagFancyNews, VT_BOOL)
DISP_FUNCTION(CNetworkCX, "Close", Close, VT_EMPTY, VTS_NONE)
DISP_FUNCTION(CNetworkCX, "Read", Read, VT_I2, VTS_PBSTR VTS_I2)
DISP_FUNCTION(CNetworkCX, "GetStatus", GetStatus, VT_I4, VTS_NONE)
DISP_FUNCTION(CNetworkCX, "Open", Open, VT_BOOL, VTS_BSTR VTS_I2 VTS_BSTR VTS_I4 VTS_BSTR)
DISP_FUNCTION(CNetworkCX, "GetErrorMessage", GetErrorMessage, VT_BSTR, VTS_NONE)
DISP_FUNCTION(CNetworkCX, "GetServerStatus", GetServerStatus, VT_I2, VTS_NONE)
DISP_FUNCTION(CNetworkCX, "GetContentLength", GetContentLength, VT_I4, VTS_NONE)
DISP_FUNCTION(CNetworkCX, "GetContentType", GetContentType, VT_BSTR, VTS_NONE)
DISP_FUNCTION(CNetworkCX, "GetContentEncoding", GetContentEncoding, VT_BSTR, VTS_NONE)
DISP_FUNCTION(CNetworkCX, "GetExpires", GetExpires, VT_BSTR, VTS_NONE)
DISP_FUNCTION(CNetworkCX, "GetLastModified", GetLastModified, VT_BSTR, VTS_NONE)
DISP_FUNCTION(CNetworkCX, "Resolve", Resolve, VT_BSTR, VTS_BSTR VTS_BSTR)
DISP_FUNCTION(CNetworkCX, "IsFinished", IsFinished, VT_BOOL, VTS_NONE)
DISP_FUNCTION(CNetworkCX, "BytesReady", BytesReady, VT_I2, VTS_NONE)
//}}AFX_DISPATCH_MAP
END_DISPATCH_MAP()
IMPLEMENT_OLECREATE(CNetworkCX, "Netscape.Network.1", 0xef5f7050, 0x385a, 0x11ce, 0x81, 0x93, 0x0, 0x20, 0xaf, 0x18, 0xf9, 0x5)
/////////////////////////////////////////////////////////////////////////////
// CNetworkCX message handlers
BOOL CNetworkCX::Open(LPCTSTR pURL, short iMethod, LPCTSTR pPostData, long lPostDataSize, LPCTSTR pPostHeaders)
{
// Reset our status flags.
m_lFlags = m_OK;
m_csErrorMessage.Empty();
// See if we're busy.
if(winfeInProcessNet == TRUE) {
m_lFlags |= m_BUSY;
return(FALSE);
}
// If we're handling a request already, shut it down.
if(m_pUrlData != NULL) {
Close();
}
// Create the URL we want to load.
m_pUrlData = NET_CreateURLStruct(pURL, NET_DONT_RELOAD);
// Create the ncapi data for the URL.
// Don't let it free off the URL in the exit routine.
// This is done in close.
// A pointer to the class is saved in the URL struct, and will
// be freed off in FE_DeleteUrlData.
CNcapiUrlData *pDontCare = new CNcapiUrlData(this, m_pUrlData);
pDontCare->DontFreeUrl();
// Set the method for the load.
// GET 0
// POST 1
// HEAD 3
m_pUrlData->method = iMethod;
// Contruct the post stuff.
if(pPostData != NULL && strlen(pPostData) != 0 && m_pUrlData->method == 1) {
m_pUrlData->post_data = (char *)XP_ALLOC(lPostDataSize);
memcpy(m_pUrlData->post_data, pPostData, CASTSIZE_T(lPostDataSize));
m_pUrlData->post_data_size = lPostDataSize;
if(pPostHeaders != NULL && strlen(pPostHeaders) != 0) {
m_pUrlData->post_headers = (char *)XP_ALLOC(strlen(pPostHeaders) + 1);
memcpy(m_pUrlData->post_headers, pPostHeaders, strlen(pPostHeaders) + 1);
}
else {
m_pUrlData->post_headers = strdup("Content-type: application/x-www-form-urlencoded");
}
StrAllocCat(m_pUrlData->post_headers, CRLF);
// Manually add the content-length.
// This was done automatically in versions of Netscape prior to 2.0.
char aBuffer[1024];
sprintf(aBuffer, "Content-length: %ld", lPostDataSize);
StrAllocCat(m_pUrlData->post_headers, aBuffer);
StrAllocCat(m_pUrlData->post_headers, CRLF);
}
// Finally, set that the stream is not yet completed.
m_bStreamComplete = FALSE;
// Need to request a URL for a particular format out, in our special context.
// Any errors should be caught in the exit routine.
GetUrl(m_pUrlData, FO_CACHE_AND_OLE_NETWORK);
return TRUE;
}
short CNetworkCX::Read(BSTR FAR* pBuffer, short iAmount)
{
// First, check for end of file condition.
if(m_cplBuffers.IsEmpty() && m_bStreamComplete == TRUE) {
return(-1);
}
// If the buffer's empty, we should just return right now.
if(m_cplBuffers.IsEmpty()) {
return(0);
}
// We'll want to either copy over the amount of data they are asking for,
// or copy over how much data we have in the buffer,
// whichever is less.
// To do this, we need to figure out the amount of data in the buffers first
// entry only.
// Get the first entry out.
CNetBuffer *pNetBuffer = (CNetBuffer *)m_cplBuffers.GetHead();
// See how much data we should be handling here.
int iBuffer = pNetBuffer->m_iSize - pNetBuffer->m_iHead;
ASSERT(iBuffer);
iAmount = min(iBuffer, iAmount);
if(iAmount <= 0) {
return(0);
}
// Copy over that amount from our buffer.
#if !defined(_UNICODE) && !defined(OLE2ANSI) && defined(MSVC4)
// Need to encode unicode ourselves.
MultiByteToWideChar(CP_ACP, 0, (pNetBuffer->m_pData + pNetBuffer->m_iHead), iAmount, *pBuffer, sizeof(OLECHAR) * iAmount);
#ifdef DEBUG
// Here's some extra goodies to make sure the conversion isn't lossy, as we can also transfer binary data.
// Can we reverse it correctly?
char *pCompare = new char[iAmount];
int iConvert = WideCharToMultiByte(CP_ACP, 0, *pBuffer, iAmount, pCompare, iAmount, NULL, NULL);
ASSERT(iConvert);
// Was the conversion correct?
int iCompare = memcmp(pCompare, (pNetBuffer->m_pData + pNetBuffer->m_iHead), iAmount);
ASSERT(!iCompare);
delete [] pCompare;
#endif
#else
memcpy(*pBuffer, (pNetBuffer->m_pData + pNetBuffer->m_iHead), iAmount);
#endif
pNetBuffer->m_iHead += iAmount;
ASSERT(pNetBuffer->m_iHead <= pNetBuffer->m_iSize);
// See if we should get rid of the buffer entry if completely read now.
if(pNetBuffer->m_iHead == pNetBuffer->m_iSize) {
// Get rid of it.
m_cplBuffers.RemoveHead();
delete pNetBuffer;
}
// Return the amount read.
return(iAmount);
}
void CNetworkCX::Close()
{
// Destroy the URL, if we have one.
if(m_pUrlData != NULL) {
// We really should check for reentrancy, but can't, as this event could happen beyond our control, such
// as the controlling application deleting their automation object.
// Only do this if we are actually loading, as netlib has probably unregistered this otherwise...
if(m_bStreamComplete == FALSE) {
BOOL bOld = winfeInProcessNet;
winfeInProcessNet = TRUE;
NET_InterruptStream(m_pUrlData);
winfeInProcessNet = bOld;
}
NET_FreeURLStruct(m_pUrlData);
m_pUrlData = NULL;
}
// Reset the end of the buffer, our stutus, et al.
CNetBuffer *pDelMe;
while(m_cplBuffers.IsEmpty() == FALSE) {
pDelMe = (CNetBuffer *)m_cplBuffers.RemoveHead();
delete pDelMe;
}
m_lFlags = m_OK;
m_csErrorMessage.Empty();
m_bStreamComplete = TRUE;
}
BSTR CNetworkCX::GetUsername()
{
// Return what the current username is.
// Up to caller to free the information.
return m_csUsername.AllocSysString();
}
void CNetworkCX::SetUsername(LPCTSTR lpszNewValue)
{
// Modify the current username to be something new.
if(lpszNewValue == NULL) {
m_csUsername.Empty();
return;
}
m_csUsername = lpszNewValue;
}
BSTR CNetworkCX::GetPassword()
{
// Return the current password setting.
// Up to caller to free the information.
return m_csPassword.AllocSysString();
}
void CNetworkCX::SetPassword(LPCTSTR lpszNewValue)
{
// Set the password to something new.
if(lpszNewValue == NULL) {
m_csPassword.Empty();
return;
}
m_csPassword = lpszNewValue;
}
long CNetworkCX::GetStatus()
{
// Give them the current status flags since the last open occurred.
return(m_lFlags);
}
BOOL CNetworkCX::GetFlagShowAllNews()
{
return m_bShowAllNews;
}
void CNetworkCX::SetFlagShowAllNews(BOOL bNewValue)
{
m_bShowAllNews = bNewValue;
}
BOOL CNetworkCX::GetFlagFancyFTP()
{
return m_bFancyFTP;
}
void CNetworkCX::SetFlagFancyFTP(BOOL bNewValue)
{
m_bFancyFTP = bNewValue;
}
BOOL CNetworkCX::GetFlagFancyNews()
{
return m_bFancyNews;
}
void CNetworkCX::SetFlagFancyNews(BOOL bNewValue)
{
m_bFancyNews = bNewValue;
}
int CNetworkCX::StreamWrite(const char *pWriteData, int32 lLength) {
// if we don't have a url, then don't do this.
if(m_pUrlData == NULL) {
return(-1);
}
// We should never get called to copy over more data than is reported by StreamReady.
// However, we don't care anymore.
// Allocate a new buffer in which to store the data.
ASSERT(lLength <= NETBUFSIZE);
CNetBuffer *pNewBuf = new CNetBuffer(CASTINT(lLength));
memcpy(pNewBuf->m_pData, pWriteData, pNewBuf->m_iSize);
// Add it to the tail of our buffer list.
m_cplBuffers.AddTail((void *)pNewBuf);
return(MK_DATA_LOADED);
}
unsigned int CNetworkCX::StreamReady() {
// If we don't have a URL, we won't take data.
if(m_pUrlData == NULL) {
return(0);
}
// If we already have n entries in our buffered data, don't do this.
// We can however take more if the netlib screws up due to this new
// buffer system.
if(m_cplBuffers.IsEmpty() == FALSE && m_cplBuffers.GetCount() >= 10) {
return(0);
}
// Return our max allowed size, don't really care if they fulfill this
// completely.
return(NETBUFSIZE);
}
void CNetworkCX::StreamComplete() {
// Function not utilized.
// Stream complete considered to be the URL exit routine.
}
void CNetworkCX::StreamAbort(int iStatus) {
// Function not utilized.
// Stream complete considered to be the URL exit routine.
}
void CNetworkCX::GetUrlExitRoutine(URL_Struct *pUrl, int iStatus, MWContext *pContext) {
// URL is done loading.
m_bStreamComplete = TRUE;
// Check for internal loading errors.
if(iStatus != MK_DATA_LOADED) {
m_lFlags |= m_INTL;
}
else if(pUrl->server_status / 100 != 2 && pUrl->server_status / 100 != 3 && iStatus == MK_DATA_LOADED && pUrl->server_status != 0) {
m_lFlags |= m_SRVR;
}
// If we have any error message what so ever, then we will save it here and set that an error occurred.
if(m_lFlags & (m_SRVR | m_INTL)) {
if(pUrl->error_msg != NULL) {
if(strlen(pUrl->error_msg) != 0) {
m_lFlags |= m_ERRS;
m_csErrorMessage = pUrl->error_msg;
}
}
}
// Call the base.
CStubsCX::GetUrlExitRoutine(pUrl, iStatus, pContext);
}
BSTR CNetworkCX::GetErrorMessage()
{
// Simply return any error message that we currently have.
return m_csErrorMessage.AllocSysString();
}
extern "C" {
NET_StreamClass *nfe_OleStream(int iFormatOut, void *pDataObj, URL_Struct *pUrlData, MWContext *pContext) {
// Return a new stream class, pass the object along for the ride.
return(NET_NewStream("Netscape_Network_1",
nfe_StreamWrite,
nfe_StreamComplete,
nfe_StreamAbort,
nfe_StreamReady,
CX2VOID(pContext->fe.cx, CNetworkCX),
pContext));
}
int nfe_StreamWrite(NET_StreamClass *stream, const char *pWriteData, int32 lLength) {
void *pDataObj=stream->data_object;
CNetworkCX *pOle = VOID2CX(pDataObj, CNetworkCX);
// Have our object handle it.
return(pOle->StreamWrite(pWriteData, lLength));
}
void nfe_StreamComplete(NET_StreamClass *stream) {
void *pDataObj=stream->data_object;
CNetworkCX *pOle = VOID2CX(pDataObj, CNetworkCX);
// Have our object handle it.
pOle->StreamComplete();
}
void nfe_StreamAbort(NET_StreamClass *stream, int iStatus) {
void *pDataObj=stream->data_object;
CNetworkCX *pOle = VOID2CX(pDataObj, CNetworkCX);
// Have our object handle it.
pOle->StreamAbort(iStatus);
}
unsigned int nfe_StreamReady(NET_StreamClass *stream) {
void *pDataObj=stream->data_object;
CNetworkCX *pOle = VOID2CX(pDataObj, CNetworkCX);
// Have our object handle it.
return(pOle->StreamReady());
}
};
short CNetworkCX::GetServerStatus()
{
// Don't do this if we don't have a URL.
if(m_pUrlData == NULL) {
return(-1);
}
else if(m_bStreamComplete != TRUE) {
// Also can't do this unless the load is done.
return(-1);
}
return(m_pUrlData->server_status);
}
long CNetworkCX::GetContentLength()
{
// Don't do this if we don't have a URL.
if(m_pUrlData == NULL) {
return(-1);
}
return(m_pUrlData->content_length);
}
BSTR CNetworkCX::GetContentType()
{
// Don't do this if we don't have a URL.
if(m_pUrlData == NULL) {
return(NULL);
}
else if(m_pUrlData->content_type == NULL) {
return(NULL);
}
else if(strlen(m_pUrlData->content_type) == 0) {
return(NULL);
}
CString s = m_pUrlData->content_type;
return s.AllocSysString();
}
BSTR CNetworkCX::GetContentEncoding()
{
// Don't do this if we don't have a URL.
if(m_pUrlData == NULL) {
return(NULL);
}
else if(m_pUrlData->content_encoding == NULL) {
return(NULL);
}
else if(strlen(m_pUrlData->content_encoding) == 0) {
return(NULL);
}
CString s = m_pUrlData->content_encoding;
return s.AllocSysString();
}
BSTR CNetworkCX::GetExpires()
{
// Don't do this if we don't have a URL.
if(m_pUrlData == NULL) {
return(NULL);
}
else if(m_pUrlData->expires == (time_t)0) {
return(NULL);
}
char *pTime = ctime(&(m_pUrlData->expires));
if(pTime == NULL) {
return(NULL);
}
CString s = pTime;
return s.AllocSysString();
}
BSTR CNetworkCX::GetLastModified()
{
// Don't do this if we don't have a URL.
if(m_pUrlData == NULL) {
return(NULL);
}
else if(m_pUrlData->last_modified == (time_t)0) {
return(NULL);
}
char *pTime = ctime(&(m_pUrlData->last_modified));
if(pTime == NULL) {
return(NULL);
}
CString s = pTime;
return s.AllocSysString();
}
BSTR CNetworkCX::Resolve(LPCTSTR pBase, LPCTSTR pRelative)
{
// Have the netlib resolve the url stuff for us.
char *cpURL = NET_MakeAbsoluteURL((char *)pBase, (char *)pRelative);
if(cpURL == NULL) {
return(NULL);
}
CString s = cpURL;
XP_FREE(cpURL);
return s.AllocSysString();
}
BOOL CNetworkCX::IsFinished()
{
// Check for end of file condition.
if(m_cplBuffers.IsEmpty() && m_bStreamComplete == TRUE) {
return(TRUE);
}
return(FALSE);
}
short CNetworkCX::BytesReady()
{
// Check to see if there's any load ready.
if(m_cplBuffers.IsEmpty() && m_bStreamComplete == TRUE) {
return(0);
}
// Return the number of bytes we are currently ready to dish out.
CNetBuffer *pReady = (CNetBuffer *)m_cplBuffers.GetHead();
int iBuffer = pReady->m_iSize - pReady->m_iHead;
ASSERT(iBuffer);
return(iBuffer);
}

View File

@ -1,169 +0,0 @@
/* -*- 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.
*/
#include "cxstubs.h"
/////////////////////////////////////////////////////////////////////////////
// CNetworkCX command target
class CNetworkCX : public CCmdTarget, public CStubsCX
{
DECLARE_DYNCREATE(CNetworkCX)
protected:
CNetworkCX(); // protected constructor used by dynamic creation
// Attributes
private:
URL_Struct *m_pUrlData; // The url to load.
BOOL m_bStreamComplete; // Wether or not the load is completed.
BOOL m_bShowAllNews; // Wether or not to show all news articles.
BOOL m_bFancyNews; // Wether or not to use Fancy News.
BOOL m_bFancyFTP; // Wether or not to use Fancy FTP.
CString m_csUsername; // The registered user name.
CString m_csPassword; // The registered password.
enum {
m_OK = 0x0000, // Data is loaded ok
m_USER = 0x0001, // User name requested, may have still loaded if supplied
m_PASS = 0x0002, // User password requested, may have still loaded if supplied
m_BUSY = 0x0100, // Busy, try back later
m_SRVR = 0x0200, // Server reported an irregular status, probably an error.
m_INTL = 0x0400, // Internal loading error, never got to server.
m_ERRS = 0x0800 // A helpful error string is available provided by Netscape.
};
long m_lFlags; // Some status flags, to mark what happened, to help caller figure out what went wrong.
CString m_csErrorMessage;
// Read buffers to store data as it comes in.
private:
CPtrList m_cplBuffers;
public:
char *AllocUsername();
char *AllocPassword();
void SetPasswordRequested() {
m_lFlags |= m_PASS;
}
void SetUsernameRequested() {
m_lFlags |= m_USER;
}
// Operations
public:
int StreamWrite(const char *pWriteData, int32 lLength);
void StreamComplete();
void StreamAbort(int iStatus);
unsigned int StreamReady();
// Context overrides
public:
virtual void Alert(MWContext *pContext, const char *pMessage);
virtual XP_Bool Confirm(MWContext *pContext, const char *pConfirmMessage);
virtual char *Prompt(MWContext *pContext, const char *pPrompt, const char *pDefault);
virtual char *PromptPassword(MWContext *pContext, const char *pMessage);
virtual XP_Bool PromptUsernameAndPassword(MWContext *pContext, const char *pMessage, char **ppUsername, char **ppPassword);
virtual XP_Bool ShowAllNewsArticles(MWContext *pContext);
virtual XP_Bool UseFancyFTP(MWContext *pContext);
virtual XP_Bool UseFancyNewsgroupListing(MWContext *pContext);
virtual void GetUrlExitRoutine(URL_Struct *pUrl, int iStatus, MWContext *pContext);
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CNetworkCX)
public:
virtual void OnFinalRelease();
//}}AFX_VIRTUAL
// Implementation
protected:
virtual ~CNetworkCX();
// Generated message map functions
//{{AFX_MSG(CNetworkCX)
// NOTE - the ClassWizard will add and remove member functions here.
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
DECLARE_OLECREATE(CNetworkCX)
// Generated OLE dispatch map functions
//{{AFX_DISPATCH(CNetworkCX)
afx_msg BSTR GetUsername();
afx_msg void SetUsername(LPCTSTR lpszNewValue);
afx_msg BSTR GetPassword();
afx_msg void SetPassword(LPCTSTR lpszNewValue);
afx_msg BOOL GetFlagShowAllNews();
afx_msg void SetFlagShowAllNews(BOOL bNewValue);
afx_msg BOOL GetFlagFancyFTP();
afx_msg void SetFlagFancyFTP(BOOL bNewValue);
afx_msg BOOL GetFlagFancyNews();
afx_msg void SetFlagFancyNews(BOOL bNewValue);
afx_msg void Close();
afx_msg short Read(BSTR FAR* pBuffer, short iAmount);
afx_msg long GetStatus();
afx_msg BOOL Open(LPCTSTR pURL, short iMethod, LPCTSTR pPostData, long lPostDataSize, LPCTSTR pPostHeaders);
afx_msg BSTR GetErrorMessage();
afx_msg short GetServerStatus();
afx_msg long GetContentLength();
afx_msg BSTR GetContentType();
afx_msg BSTR GetContentEncoding();
afx_msg BSTR GetExpires();
afx_msg BSTR GetLastModified();
afx_msg BSTR Resolve(LPCTSTR pBase, LPCTSTR pRelative);
afx_msg BOOL IsFinished();
afx_msg short BytesReady();
//}}AFX_DISPATCH
DECLARE_DISPATCH_MAP()
};
/////////////////////////////////////////////////////////////////////////////
// Miscellaneous Functions
extern "C" {
NET_StreamClass *nfe_OleStream(int iFormatOut, void *pDataObj, URL_Struct *pUrlData, MWContext *pContext);
int nfe_StreamWrite(NET_StreamClass *stream, const char *pWriteData, int32 lLength);
void nfe_StreamComplete(NET_StreamClass *stream);
void nfe_StreamAbort(NET_StreamClass *stream, int iStatus);
unsigned int nfe_StreamReady(NET_StreamClass *stream);
};
// Max amount of data to store in each CNetBuffer.
#define NETBUFSIZE (30 * 1024)
// Structure to store read data.
struct CNetBuffer {
int m_iHead;
int m_iSize;
char *m_pData;
CNetBuffer(int iSize) {
ASSERT(iSize);
m_iHead = 0;
m_iSize = iSize;
m_pData = new char[iSize];
}
~CNetBuffer() {
if(m_pData) {
delete m_pData;
}
}
};
/////////////////////////////////////////////////////////////////////////////

File diff suppressed because it is too large Load Diff

View File

@ -1,264 +0,0 @@
/* -*- 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.
*/
#ifndef __HTML_PANE_CONTEXT_H
#define __HTML_PANE_CONTEXT_H
// What is CPaneCX?
// A pane is part of a complete window.
//
// There is no relation from a pane to the chrome of a full window.
// There is no frame, no document, no view, no toolbar, etc.
// No assumptions should be made, or the pane becomes non-reusable in a
// window that is yet to be invented.
//
// A pane can be put many places:
// In a dialog.
// In a navigation tool.
// In a browser.
// It is up to the place to provide the chrome. It is up to the pane to
// provide the HTML.
#include "cxdc.h"
#include "drawable.h"
#define VSCROLL_LINE 32
#define HSCROLL_LINE 32
#define SCROLL_UNITS 10000
#define RIGHT_MARGIN (-1 * Pix2TwipsX(8))
#define LEFT_MARGIN (Pix2TwipsX(8))
#define TOP_MARGIN (Pix2TwipsY(8))
#define BOTTOM_MARGIN (-1 * Pix2TwipsY(8))
struct PaneMessage {
PaneMessage(WPARAM wSet, LPARAM lSet)
{
wParam = wSet;
lParam = lSet;
bSetRetval = FALSE;
lRetval = NULL;
}
WPARAM wParam;
LPARAM lParam;
BOOL bSetRetval;
LPARAM lRetval;
};
class CPaneCX : public CDCCX {
public:
CPaneCX(HWND hPane, BOOL bDestroyOnWMDestroy);
~CPaneCX();
virtual void DestroyContext();
virtual void Initialize(BOOL bOwnDC, RECT *pRect = NULL, BOOL bInitialPalette = TRUE, BOOL bNewMemDC = TRUE);
private:
HWND m_hPane;
BOOL m_bDestroyOnWMDestroy;
private:
BOOL SubClass(HWND hWnd, BOOL bSubClass);
void CacheDCInfo(BOOL bCache);
public:
HWND GetPane() const;
HWND SetPane(HWND hPane);
public:
BOOL IsNavCenterHTMLPane() const;
private:
WNDPROC m_pPrevProc;
private:
WNDPROC GetSubclassedProc();
friend LRESULT CALLBACK
#ifndef _WIN32
_export
#endif
PaneProc(HWND hPane, UINT uMsg, WPARAM wParam, LPARAM lParam);
protected:
void PreWMPaint(PaneMessage *pMsg);
#ifdef EDITOR
virtual
#endif
void PreWMErasebkgnd(PaneMessage *pMsg);
void PreWMVScroll(PaneMessage *pMsg);
void PreWMHScroll(PaneMessage *pMsg);
void PreNavCenterQueryPosition(PaneMessage *pMsg);
void PreIdleUpdateCmdUI(PaneMessage *pMsg);
#if defined(XP_WIN32) && _MSC_VER >= 1100
void PreWMMouseWheel(PaneMessage *pMsg);
void PreWMHackedMouseWheel(PaneMessage *pMsg);
#endif
protected:
virtual void AftWMSize(PaneMessage *pMsg);
void AftWMDestroy(PaneMessage *pMsg);
void AftWMMouseActivate(PaneMessage *pMsg);
private:
HDC m_hClassDC;
HDC m_hOwnDC;
HDC m_hSubstDC;
public:
void RefreshArea(int32 lLeft, int32 lTop, uint32 lWidth, uint32 lHeight);
virtual HDC GetContextDC();
virtual void ReleaseContextDC(HDC hDC);
virtual BOOL IsOwnDC() const;
virtual BOOL IsClassDC() const;
HDC SubstituteDC(HDC hDC);
private:
CDrawable *m_pDrawable;
COffscreenDrawable *m_pOffscreenDrawable;
COnscreenDrawable *m_pOnscreenDrawable;
public:
CDrawable *GetDrawable();
virtual void SetDrawable(MWContext *pContext, CL_Drawable *pDrawable);
virtual void GetDrawingOrigin(int32 *plOrgX, int32 *plOrgY);
virtual FE_Region GetDrawingClip();
public:
void *m_pResizeReloadTimeout;
protected:
void NiceResizeReload(void);
private:
int32 m_nPageY;
int32 m_nPageX;
BOOL m_bVScrollBarOn;
BOOL m_bHScrollBarOn;
BOOL m_bDynamicScrollBars;
BOOL m_bAlwaysShowScrollBars;
#ifdef XP_WIN32
int m_iWheelDelta;
#endif
public:
void ShowScrollBars(int iBars, BOOL bShow);
BOOL IsVScrollBarOn();
BOOL IsHScrollBarOn();
BOOL DynamicScrollBars();
BOOL AlwaysShowScrollBars();
int32 GetPageY();
int32 GetPageX();
void SetAlwaysShowScrollBars(BOOL bSet);
void SetDynamicScrollBars(BOOL bSet);
void RealizeScrollBars(int32 *pX = NULL, int32 *pY = NULL);
#ifdef EDITOR
virtual
#endif
void Scroll(int iBars, UINT uSBCode, UINT uPos, HWND hCtrl, UINT uTimes = 1);
void MakeElementVisible(int32 lX, int32 lY);
#ifdef XP_WIN16
// 16-bit forms need their own segment.
private:
HGLOBAL m_hTextElementSegment;
LPVOID m_lpTextElementHeap;
public:
HINSTANCE GetSegment();
#endif
// Marginal implementation.
protected:
int32 m_lLeftMargin;
int32 m_lRightMargin;
int32 m_lTopMargin;
int32 m_lBottomMargin;
// Coordinate resolution.
public:
void ResolvePoint(XY& xy, POINT& point);
virtual void GetWindowOffset(int32 *pX, int32 *pY);
LO_Element *GetLayoutElement(XY& Point, CL_Layer *layer) const;
public:
virtual int GetUrl(URL_Struct *pUrl, FO_Present_Types iFormatOut, BOOL bReallyLoad = TRUE, BOOL bForceNew = FALSE);
public:
virtual void LayoutNewDocument(MWContext *pContext, URL_Struct *pURL, int32 *pWidth, int32 *pHeight, int32 *pmWidth, int32 *pmHeight);
virtual void FinishedLayout(MWContext *pContext);
virtual void SetDocDimension(MWContext *pContext, int iLocation, int32 lWidth, int32 lLength);
virtual void DisplayBuiltin(MWContext *pContext, int iLocation, LO_BuiltinStruct *pBuiltin);
virtual void FreeBuiltinElement(MWContext *pContext, LO_BuiltinStruct *pBuiltin);
};
inline HWND CPaneCX::GetPane() const
{
return(m_hPane);
}
inline WNDPROC CPaneCX::GetSubclassedProc()
{
return(m_pPrevProc);
}
inline CDrawable *CPaneCX::GetDrawable()
{
return(m_pDrawable);
}
inline BOOL CPaneCX::IsVScrollBarOn()
{
return(m_bVScrollBarOn);
}
inline BOOL CPaneCX::IsHScrollBarOn()
{
return(m_bHScrollBarOn);
}
inline BOOL CPaneCX::DynamicScrollBars()
{
return(m_bDynamicScrollBars);
}
inline BOOL CPaneCX::AlwaysShowScrollBars()
{
return(m_bAlwaysShowScrollBars);
}
inline int32 CPaneCX::GetPageY()
{
return(m_nPageY);
}
inline int32 CPaneCX::GetPageX()
{
return(m_nPageX);
}
inline void CPaneCX::SetAlwaysShowScrollBars(BOOL bSet)
{
m_bAlwaysShowScrollBars = bSet;
}
inline void CPaneCX::SetDynamicScrollBars(BOOL bSet)
{
m_bDynamicScrollBars = bSet;
}
inline void CPaneCX::ResolvePoint(XY& xy, POINT& point)
{
xy.x = Pix2TwipsX(point.x) + GetOriginX();
xy.y = Pix2TwipsY(point.y) + GetOriginY();
}
inline LO_Element *CPaneCX::GetLayoutElement(XY& Point, CL_Layer *layer) const
{
#ifdef MOZ_NGLAYOUT
XP_ASSERT(0);
return NULL;
#else
return(LO_XYToElement(GetContext(), Point.x, Point.y, layer));
#endif
}
inline BOOL CPaneCX::IsNavCenterHTMLPane() const
{
BOOL bRetval = FALSE;
MWContext *pContext = GetContext();
if(pContext && MWContextPane == pContext->type && Pane == GetContextType()) {
bRetval = TRUE;
}
return(bRetval);
}
#endif // __HTML_PANE_CONTEXT_H

File diff suppressed because it is too large Load Diff

View File

@ -1,302 +0,0 @@
/* -*- 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.
*/
#ifndef __PrintContext_H
// Avoid include redundancy
//
#define __PrintContext_H
// Purpose: Provide a context specifically for printing
// Comments:
// Required Includes
//
#include "cxdc.h"
#include "cxprndlg.h"
#include "drawable.h"
// Constants
//
#define POS_CENTER 1
#define POS_LEFT 2
#define POS_RIGHT 3
#define POS_HEADER 1
#define POS_FOOTER 2
typedef enum {
BLOCK_DISPLAY,
CAPTURE_POSITION,
DISPLAY
} PrinterDisplayMode;
// Structures
//
class CPrintCX : public CDCCX {
// Construction, destruction, indirect construction
public:
CPrintCX(URL_Struct *pUrl, SHIST_SavedData *pSavedData = NULL, char *pDisplayUrl = NULL);
~CPrintCX();
virtual void DestroyContext();
static void PrintAnchorObject(URL_Struct *pUrl, CView *pView,
SHIST_SavedData *pSavedData = NULL, char *pDisplayUrl = NULL);
static void PreviewAnchorObject(CPrintCX *& pPreview, URL_Struct *pUrl, CView *pView, CDC* pDC,
CPrintInfo *pInfo, SHIST_SavedData *pSavedData = NULL, char *pDisplayUrl = NULL);
static void AutomatedPrint(const char *pDocument, const char *pPrinter, const char *pDriver, const char *pPort);
// The anchor we're printing.
protected:
char *m_pAnchor;
// The actual anchor name to use for Header/Footer
// (In Composer: we may be printing from a temporary local file)
char *m_pDisplayUrl;
HFONT m_hFont;
int m_iFontCSID;
int m_iMaxWidth;
int m_offscrnWidth;
int m_offscrnHeight;
// CDC Access
private:
HDC m_hdcPrint;
#ifdef XP_WIN32
HDC m_hOffscrnDC;
HDC m_hOrgPrintDC;
HDC m_hOtherPrintDC;
HBITMAP m_hOffScrnBitmap;
HBITMAP m_saveBitmap;
BOOL m_printBk;
void SubOffscreenPrintDC() {m_hOrgPrintDC = m_hdcPrint; m_hdcPrint = m_hOffscrnDC;}
void RestorePrintDC() { m_hdcPrint = m_hOrgPrintDC;}
#endif
CDC *m_previewDC;
lo_SavedEmbedListData* m_embedList; /* to save the savedData from the URL struct.*/
public:
virtual HDC GetContextDC(){
if(IsPrintPreview())
return m_previewDC->GetSafeHdc();
else
return m_hdcPrint;
}
virtual BOOL IsDeviceDC();
#ifdef XP_WIN32
BOOL IsPrintingBackground() {return m_printBk;}
#endif
virtual HDC GetAttribDC();
virtual void ReleaseContextDC(HDC pDC);
// Post Initialization
public:
virtual void Initialize(BOOL bOwnDC, RECT *pRect = NULL, BOOL bInitialPalette = TRUE, BOOL bNewMemDC = TRUE);
private:
// Margins
int32 m_lLeftMargin;
int32 m_lTopMargin;
int32 m_lRightMargin;
int32 m_lBottomMargin;
// True page dimensions
int32 m_lPageHeight;
int32 m_lPageWidth;
// Document dimensions
int32 m_lDocWidth;
int32 m_lDocHeight;
// Color contingencies
BOOL m_bBlackText; // All text as black?
BOOL m_bBlackLines; // All line drawing as black?
// Drawing contingencies
BOOL m_bSolidLines; // All lines are solid?
BOOL m_bBackground; // Should we draw the backgrounds?
BOOL m_bBitmaps; // Should we print bitmaps?
BOOL m_bReverseOrder; // Print in reverse order?
// Headers/footers
BOOL m_bNumber; // Number the pages?
BOOL m_bTitle; // Give each page the appropriate title?
CPrinterDrawable *m_pDrawable; // Drawable that represents the printer
// Print status dialog, also the parent of any dialogs we present!
private:
CPrintStatusDialog *m_pStatusDialog;
// the real meat of the print process
public:
#ifdef XP_WIN32
HDC GetOffscreenDC() {return m_hOffscrnDC;}
virtual int GetLeftMargin()
{ if (m_printBk && m_hdcPrint == m_hOffscrnDC)
return 0;
else return m_lLeftMargin;
}
virtual int GetTopMargin()
{ if (m_printBk && m_hdcPrint == m_hOffscrnDC)
return 0;
else return m_lTopMargin;
}
int32 GetXConvertUnit()
{
if (m_printBk && (m_hdcPrint == m_hOffscrnDC)) return 1;
else return m_lConvertX;
}
int32 GetYConvertUnit()
{
if (m_printBk && (m_hdcPrint == m_hOffscrnDC)) return 1;
else return m_lConvertY;
}
#endif
void PrintPage(int iPage, HDC pNewDC = NULL, CPrintInfo *pNewInfo = NULL);
private:
void CommencePrinting(URL_Struct *pUrl);
void FormatPages();
void CapturePositions();
void Capture(int32 lOrgX, int32 lOrgY, int32 lWidth, int32 lHeight);
CPtrList m_cplCaptured;
CPtrList m_cplPages;
int32 m_lCaptureScrollOffset;
void CreateHeaderFooterFont();
// Useful information.
private:
int m_iLastPagePrinted;
public:
int PageCount();
int LastPagePrinted();
private:
PrinterDisplayMode m_iDisplayMode;
public:
static BOOL m_bGlobalBlockDisplay;
PrinterDisplayMode GetDisplayMode();
// Output overrides.
public:
virtual void DisplayIcon(int32 x, int32 y, int icon_number);
BOOL AdjustRect(LTRB& Rect);
virtual BOOL ResolveElement(LTRB& Rect, int32 x, int32 y, int32 x_offset, int32 y_offset,
int32 width, int32 height);
virtual BOOL ResolveElement(LTRB& Rect, NI_Pixmap *pImage, int32 lX, int32 lY,
int32 orgx, int32 orgy,
uint32 ulWidth, uint32 ulHeight,
int32 lScaleWidth, int32 lScaleHeight);
virtual BOOL ResolveElement(LTRB& Rect, LO_EmbedStruct *pEmbed, int iLocation, Bool bWindowed);
virtual BOOL ResolveElement(LTRB& Rect, LO_FormElementStruct *pFormElement);
virtual COLORREF ResolveTextColor(LO_TextAttr *pAttr);
virtual COLORREF ResolveBGColor(unsigned uRed, unsigned uGreen, unsigned uBlue);
virtual BOOL ResolveHRSolid(LO_HorizRuleStruct *pHorizRule);
virtual BOOL ResolveLineSolid();
virtual void ResolveTransparentColor(unsigned uRed, unsigned uGreen, unsigned uBlue);
virtual COLORREF ResolveDarkLineColor();
virtual COLORREF ResolveLightLineColor();
virtual COLORREF ResolveBorderColor(LO_TextAttr *pAttr);
virtual PRBool ResolveIncrementalImages();
virtual void SetDocDimension(MWContext *pContext, int iLocation, int32 lWidth, int32 lHeight);
virtual void GetDrawingOrigin(int32 *plOrgX, int32 *plOrgY);
virtual FE_Region GetDrawingClip();
virtual void EraseBackground(MWContext *pContext, int iLocation,
int32 x, int32 y, uint32 width, uint32 height,
LO_Color *pColor);
// Members needed to properly implement printing.
protected:
CPrintInfo *m_pcpiPrintJob;
DOCINFO m_docInfo;
// document charset id
public:
int m_iCSID;
void* p_TimeOut;
// Members need to properly implement print preview.
protected:
CView *m_pPreviewView;
BOOL m_bPreview;
public:
BOOL IsPrintPreview() const {
return(m_bPreview);
}
// Overrides
public:
// Dialog owner
virtual CWnd *GetDialogOwner() const;
// Progress messages.
virtual void Progress(MWContext *pContext, const char *pMessage);
// All connections complete.
virtual void AllConnectionsComplete(MWContext *pContext);
virtual void FinishedLayout(MWContext *pContext);
// Display routines
virtual void DisplayBullet(MWContext *pContext, int iLocation, LO_BullettStruct *pBullet);
#ifndef MOZ_NGLAYOUT
virtual void DisplayEmbed(MWContext *pContext, int iLocation, LO_EmbedStruct *pEmbed);
virtual void DisplayFormElement(MWContext *pContext, int iLocation, LO_FormElementStruct *pFormElement);
#endif
virtual void DisplayHR(MWContext *pContext, int iLocation, LO_HorizRuleStruct *pHorizRule);
virtual int DisplayPixmap(NI_Pixmap* image, NI_Pixmap* mask, int32 x, int32 y, int32 x_offset, int32 y_offset, int32 width, int32 height, int32 lScaleWidth, int32 lScaleHeight, LTRB& Rect);
virtual void DisplayLineFeed(MWContext *pContext, int iLocation, LO_LinefeedStruct *pLineFeed, XP_Bool clear);
virtual void DisplaySubDoc(MWContext *pContext, int iLocation, LO_SubDocStruct *pSubDoc);
virtual void DisplayCell(MWContext *pContext, int iLocation, LO_CellStruct *pCell);
virtual void DisplaySubtext(MWContext *pContext, int iLocation, LO_TextStruct *pText, int32 lStartPos, int32 lEndPos, XP_Bool clear);
virtual void DisplayTable(MWContext *pContext, int iLocation, LO_TableStruct *pTable);
virtual void DisplayText(MWContext *pContext, int iLocation, LO_TextStruct *pText, XP_Bool clear);
virtual void DisplayPlugin(MWContext *pContext, LO_EmbedStruct *pEmbed, NPEmbeddedApp* pEmbeddedApp, int iLocation);
virtual void DisplayWindowlessPlugin(MWContext *pContext, LO_EmbedStruct *pEmbed, NPEmbeddedApp *pEmbeddedApp, int iLocation);
#ifdef XP_WIN32
void CopyOffscreenBitmap(NI_Pixmap* image, int32 x, int32 y, int32 x_offset, int32 y_offset, int32 width, int32 height, int32 lScaleWidth, int32 lScaleHeight, LTRB& Rect);
#endif
// Layout initialization respecting page size.
virtual void LayoutNewDocument(MWContext *pContext, URL_Struct *pURL, int32 *pWidth, int32 *pHeight, int32 *pmWidth, int32 *pmHeight);
virtual void GetUrlExitRoutine(URL_Struct *pUrl, int iStatus, MWContext *pContext);
// Call this to cancel the print job.
public:
void CancelPrintJob();
private:
BOOL m_bCancel;
// this is to prevent the destroycontext get call twice.
BOOL m_bHandleCancel;
// These determine wether or not we need to continue to attempt to start the
// document, and how we end the printing of the document.
// Doesn't apply to preview.
private:
BOOL m_bAbort;
BOOL m_bNeedStartDoc;
BOOL m_bAllConnectionCompleteCalled;
BOOL m_bFormatStarted;
BOOL m_bFinishedLayoutCalled;
SIZE screenRes;
SIZE printRes;
int StartDoc();
void PrintTextAllign ( HDC pDC, char * szBuffer, int position, int hpos );
void ScreenToPrint(POINT* point, int num = 1);
void FormatAndPrintPages(MWContext *context);
};
#endif // __PrintContext_H

View File

@ -1,126 +0,0 @@
/* -*- 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.
*/
#include "stdafx.h"
#include "cxprndlg.h"
#include "cxprint.h"
#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CPrintStatusDialog dialog
CPrintStatusDialog::CPrintStatusDialog(CWnd* pParent, CPrintCX *pCX)
: CDialog(CPrintStatusDialog::IDD, pParent)
{
//{{AFX_DATA_INIT(CPrintStatusDialog)
m_csLocation = _T("");
m_csProgress = _T("");
//}}AFX_DATA_INIT
// Save the context which owns us.
m_pCX = pCX;
}
void CPrintStatusDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPrintStatusDialog)
DDX_Text(pDX, IDC_LOCATION, m_csLocation);
DDX_Text(pDX, IDC_PROGRESS, m_csProgress);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CPrintStatusDialog, CDialog)
//{{AFX_MSG_MAP(CPrintStatusDialog)
ON_WM_PAINT()
ON_WM_SIZE()
ON_WM_QUERYDRAGICON()
ON_WM_SYSCOMMAND()
ON_WM_ERASEBKGND()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPrintStatusDialog message handlers
void CPrintStatusDialog::OnCancel()
{
// Let the owning context know that the cancel button has been
// hit.
TRACE("Received request to cancel print job.\n");
m_pCX->CancelPrintJob();
// Don't call their on canel, or it blows away the dialog.
//CDialog::OnCancel();
}
BOOL CPrintStatusDialog::OnEraseBkgnd(CDC *pDC) {
if(IsIconic() == TRUE) {
return(TRUE);
}
return(CDialog::OnEraseBkgnd(pDC));
}
void CPrintStatusDialog::OnSysCommand(UINT nID, LPARAM lParam) {
// Don't maximize ourselves
if(nID == SC_MAXIMIZE) {
return;
}
CDialog::OnSysCommand(nID, lParam);
}
void CPrintStatusDialog::OnPaint()
{
CPaintDC dc(this); // device context for painting
// Check to see if we need to draw our icon.
if(IsIconic() != FALSE) {
HICON hIcon = theApp.LoadIcon(IDR_MAINFRAME);
ASSERT(hIcon);
dc.DrawIcon(2, 2, hIcon);
}
// Do not call CDialog::OnPaint() for painting messages
}
void CPrintStatusDialog::OnSize(UINT nType, int cx, int cy)
{
// Change any maximize request to a normal request.
if(nType == SIZE_MAXIMIZED) {
nType = SIZE_RESTORED;
}
CDialog::OnSize(nType, cx, cy);
}
HCURSOR CPrintStatusDialog::OnQueryDragIcon() {
// Return the icon that will show up when dragged.
HICON hIcon = theApp.LoadIcon(IDR_MAINFRAME);
ASSERT(hIcon);
return((HCURSOR)hIcon);
}

View File

@ -1,70 +0,0 @@
/* -*- 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.
*/
#ifndef __ContextPrintDialog_H
#define __ContextPrintDialog_H
// cxprndlg.h : header file
//
class CPrintCX;
/////////////////////////////////////////////////////////////////////////////
// CPrintStatusDialog dialog
class CPrintStatusDialog : public CDialog
{
// Construction
public:
CPrintStatusDialog(CWnd* pParent, CPrintCX *pCX);
BOOL Create(UINT id, CWnd * pParent) { return(CDialog::Create(id, pParent)); }
private:
// The context owning us.
CPrintCX *m_pCX;
public:
// Dialog Data
//{{AFX_DATA(CPrintStatusDialog)
enum { IDD = IDD_CONTEXT_PRINT_STATUS };
CString m_csLocation;
CString m_csProgress;
//}}AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CPrintStatusDialog)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(CPrintStatusDialog)
virtual void OnCancel();
afx_msg void OnPaint();
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg HCURSOR OnQueryDragIcon();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
#endif // __ContextPrintDialog_H

File diff suppressed because it is too large Load Diff

View File

@ -1,216 +0,0 @@
/* -*- 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.
*/
// cxsave.h : header file
//
#include "cxstubs.h"
#include "widgetry.h"
/////////////////////////////////////////////////////////////////////////////
// CSaveCX dialog
class CSaveCX : public CDialog, public CStubsCX
{
// Construction
private:
char* GetMailNewsTempFileName(char* pTempPath, char *pFileName = NULL);
BOOL CanCreate(URL_Struct * pUrl = NULL); // Can we proceed with creation? Used by SaveObject.
BOOL Creator();
public:
CSaveCX(const char *pAnchor, const char *pViewer = NULL, CWnd *pParent = NULL); // For external viewing or saving
~CSaveCX();
// Indirect Construction
private:
void DoCreate() {
// Set dimensions of progress
m_crBounds = CRect(5, 50, 5 + 175, 50 + 15);
MapDialogRect(m_crBounds);
m_crBounds.InflateRect(-1, -1); // Shrink for border.
}
// Helper function to figure out correct file extension
#ifdef MOZ_MAIL_NEWS
void AddFileExtension(char *& pFileName);
#endif
public:
static BOOL SaveAnchorObject(const char *pAnchor, History_entry *pHist, int16 iCSID = 0, CWnd *pParent = NULL, char * pFileName = NULL);
static BOOL SaveAnchorAsText(const char *pAnchor, History_entry *pHist, CWnd *pParent, char *pFileName);
static NET_StreamClass *SaveUrlObject(URL_Struct *pUrl, CWnd *pParent = NULL, char * pFileName = NULL);
static NET_StreamClass *ViewUrlObject(URL_Struct *pUrl, const char *pViewer, CWnd *pParent = NULL);
static NET_StreamClass *OleStreamObject(NET_StreamClass *pOleStream, URL_Struct *pUrl, const char *pViewer, CWnd *pParent = NULL);
static BOOL SaveToGlobal(HGLOBAL *phGlobal, LPCSTR lpszUrl, LPCSTR lpszTitle); // Returns context id
#ifdef MOZ_MAIL_NEWS
static BOOL SaveToFile(CFile *pFile, LPCSTR lpszUrl, LPCSTR lpszTitle);
#endif
// What we're saving
private:
CProgressMeter m_ProgressMeter;
History_entry * m_pHist;
CString m_csAnchor; // The anchor to load
CString m_csViewer; // The viewer to spawn, if specified, file will be removed on exit and
// the user is not prompted for a file name in which to save.
int m_iFileType; // The format of the file (needed for text front end when saving basically....)
CString m_csFileName; // The file to save it in
CWnd *m_pParent; // Our parent (need for possible file dialogs).
NET_StreamClass *m_pSecondaryStream; // A secondary stream, sometimes we chain together streams.
long tFirstTime;
long tLastTime;
long tLastBarTime;
int iLastPercent;
// Wether or not we were interrupted (cleanup even more).
public:
URL_Struct *m_pUrl; // The URL_Struct as known by the netlib
BOOL m_bInterrupted;
BOOL m_bAborted;
BOOL m_bSavingToGlobal;
int16 m_iCSID; //WinCX pass default character set information here
// A way to manually set the URL we're handling without having
// the dialog create one.
// Also a way to manually set the secondary stream for the URL that
// we're handling.
public:
void SetUrl(URL_Struct *pUrl) {
ASSERT(m_pUrl == NULL);
m_pUrl = pUrl;
}
void SetSecondaryStream(NET_StreamClass *pSecondaryStream) {
ASSERT(m_pSecondaryStream == NULL);
ASSERT(m_pSink == NULL); // Secondary streams require no sink.
ASSERT(!m_csViewer.IsEmpty() || m_bSavingToGlobal);
pSecondaryStream->window_id = GetContext();
m_pSecondaryStream = pSecondaryStream;
}
NET_StreamClass *GetSecondaryStream() const {
return(m_pSecondaryStream);
}
void ClearSecondary() {
m_pSecondaryStream = NULL;
}
// Informational
public:
BOOL IsSaving() const {
return(m_csViewer.IsEmpty());
}
BOOL IsViewing() const {
return(IsSaving() == FALSE ? TRUE : FALSE);
}
BOOL IsShellExecute() const {
return(m_csViewer == "ShellExecute");
}
BOOL IsSavingToGlobal() const {
return m_bSavingToGlobal;
}
CString GetFileName() const {
return(m_csFileName);
}
CString GetAnchor() const {
return(m_csAnchor);
}
CString GetViewer() const;
// For dialogs
public:
virtual CWnd *GetDialogOwner() const;
// Serialization information
private:
CStdioFile *m_pSink;
public:
void SetSink(CStdioFile *pSink) {
ASSERT(m_pSecondaryStream == NULL); // Sinks require no secondary stream.
m_pSink = pSink;
}
CStdioFile *GetSink() const {
return(m_pSink);
}
void ClearSink() {
m_pSink = NULL;
}
// Progress Information, manipulated by GraphProgress
private:
void Progress(int32 lPercent); // Draw progress bar
int32 m_lOldPercent; // Old percentage to optimize drawing in OnPaint.
CRect m_crBounds; // Bounds of dialog progress bar.
// Context Overrides
public:
// The URL exit routine.
virtual void GetUrlExitRoutine(URL_Struct *pUrl, int iStatus, MWContext *pContext);
// The text translation exit routine.
virtual void TextTranslationExitRoutine(PrintSetup *pTextFE);
// All Connections are done.
virtual void AllConnectionsComplete(MWContext *pContext);
// Textual progress information.
virtual void Progress(MWContext *pContext, const char *pMessage);
// Progress bar function.
virtual void SetProgressBarPercent(MWContext *pContext, int32 lPercent);
// Graph progression.
virtual void GraphProgress(MWContext *pContext, URL_Struct *pURL, int32 lBytesReceived, int32 lBytesSinceLastTime, int32 lContentLength);
// Dialog Data
//{{AFX_DATA(CSaveCX)
enum { IDD = IDD_CONTEXT_SAVE };
CString m_csAction;
CString m_csDestination;
CString m_csLocation;
CString m_csProgress;
CString m_csTimeLeft;
CString m_csPercentComplete;
//}}AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CSaveCX)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(CSaveCX)
virtual void OnCancel();
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
virtual BOOL OnInitDialog();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
extern "C" {
// Netlib API to the stream that will save the file to disk.
NET_StreamClass *ContextSaveStream(int iFormatOut, void *pDataObj, URL_Struct *pUrl, MWContext *pContext);
unsigned int ContextSaveReady(NET_StreamClass *stream);
int ContextSaveWrite(NET_StreamClass *stream, const char *pWriteData, int32 iDataLength);
void ContextSaveComplete(NET_StreamClass *stream);
void ContextSaveAbort(NET_StreamClass *stream, int iStatus);
};

View File

@ -1,683 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* 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.
*/
#include "stdafx.h"
#include "cxstubs.h"
#ifdef MOZ_MAIL_NEWS
#include "mailpriv.h"
#endif
#include "timer.h"
#include "dialog.h"
#if defined(SMOOTH_PROGRESS)
#include "progress.h"
#endif
CStubsCX::CStubsCX() {
// Purpose: Create a CStubCX
// Arguments: void
// Returns: none
// Comments: Really of no use, just set the context type.
// Revision History:
// 05-01-95 created GAB
//
m_cxType = Stubs;
m_pOuterUnk = NULL;
m_ulRefCount = 1; // Never auto delete
}
// Purpose: Create a CStubCX
// Arguments: void
// Returns: none
// Comments: Really of no use, just set the context type.
// Revision History:
// 05-01-95 created GABby
//
CStubsCX::CStubsCX(ContextType ctMyType, MWContextType XPType)
{
m_cxType = ctMyType;
GetContext()->type = XPType;
m_pOuterUnk = NULL;
m_ulRefCount = 1; // Never auto delete
}
CStubsCX::CStubsCX( LPUNKNOWN pOuterUnk ) {
// Purpose: Create a CStubCX
// Arguments: void
// Returns: none
// Comments: Really of no use, just set the context type.
// Revision History:
// 05-01-95 created GAB
//
m_pOuterUnk = pOuterUnk;
m_ulRefCount = 0;
m_cxType = Stubs;
}
// Purpose: Create a CStubCX
// Arguments: void
// Returns: none
// Comments: Really of no use, just set the context type.
// Revision History:
// 05-01-95 created GABby
//
CStubsCX::CStubsCX( LPUNKNOWN pOuterUnk, ContextType ctMyType, MWContextType XPType)
{
m_pOuterUnk = pOuterUnk;
m_ulRefCount = 0;
m_cxType = ctMyType;
GetContext()->type = XPType;
}
// Purpose: Release outer unknown
// Arguments: void
// Returns: none
// Comments:
// Revision History:
// 05-01-95 created GAB
//
CStubsCX::~CStubsCX() {
}
//
// Utility to parse a URL and return the domain part.
//
// e.g., IN: http://www.netscape.com/comprod/netscape_products.html
// OUT: www.netscape.com
//
static BOOL GetDomainFromURL( const char *pszURL, char *pszDomain )
{
if( !pszURL || !*pszURL || !pszDomain )
{
return FALSE;
}
char szProtocolDelimiter[] = _T("://");
char *pszCsr = _tcsstr( pszURL, szProtocolDelimiter );
if( !pszCsr )
{
return FALSE;
}
pszCsr += _tcslen( szProtocolDelimiter );
if( !*pszCsr )
{
return FALSE;
}
char *pszCsrEnd = _tcschr( pszCsr, '/' );
USHORT uLen = pszCsrEnd ? (pszCsrEnd - pszCsr) : _tcslen( pszCsr );
_tcsncpy( pszDomain, pszCsr, uLen );
pszDomain[uLen] = 0;
return TRUE;
}
void MakeSecureTitle( CAbstractCX *pCX, CString &csTitle )
{
if( !pCX )
{
return;
}
char szDomain[1024];
*szDomain = 0;
URL_Struct *pURL = pCX->CreateUrlFromHist();
if( pURL )
{
GetDomainFromURL( pURL->address, szDomain );
NET_FreeURLStruct( pURL );
}
csTitle = _T("");
if( *szDomain )
{
csTitle = szDomain;
csTitle += _T(" - ");
}
csTitle += szLoadString( IDS_JSAPP );
}
// Below are all the stubs of the class.
// They are completely empty, some returning some default values which
// can change if need be.
// If you need special functionality in your higher level class, then
// override these functions in that class, and leave these functions be!
// 05-01-95 created GAB
void CStubsCX::Alert(MWContext *pContext, const char *pMessage) {
// We need to bring up an alert box.
// Override if this isn't what you need.
#ifdef XP_WIN16
if(sysInfo.IsWin4() == FALSE) {
// On win16 (under 3.1), enourmous strings cause thrashing of the heap
// when combined with MessageBox.
// See what we can do....
}
#endif
theApp.m_splash.SafeHide();
CWnd * pWnd = GetDialogOwner();
#ifdef MOZ_MAIL_NEWS
// WM_REQUESTPARENT is mailpriv.h only
if (!pWnd->IsWindowVisible())
{
CWnd * pParent = (CWnd *)pWnd->SendMessage(WM_REQUESTPARENT);
if (pParent)
pWnd = pParent;
}
#endif // MOZ_MAIL_NEWS
CString csTitle = _T("");
if( pContext && pContext->bJavaScriptCalling )
{
MakeSecureTitle( this, csTitle );
}
else
{
csTitle = szLoadString( AFX_IDS_APP_TITLE );
}
pWnd->MessageBox( pMessage, (LPCSTR)csTitle, MB_TASKMODAL | MB_ICONEXCLAMATION | MB_OK );
}
STDMETHODIMP CStubsCX::QueryInterface(REFIID refiid, LPVOID * ppv)
{
*ppv = NULL;
if (IsEqualIID(refiid,IID_IUnknown))
*ppv = (LPUNKNOWN) this;
else if (IsEqualIID(refiid,IID_IMWContext))
*ppv = (LPMWCONTEXT) this;
else if (m_pOuterUnk)
return m_pOuterUnk->QueryInterface( refiid, ppv );
if (*ppv != NULL) {
((LPUNKNOWN) *ppv)->AddRef();
return NOERROR;
}
return ResultFromScode(E_NOINTERFACE);
}
STDMETHODIMP_(ULONG) CStubsCX::AddRef(void)
{
if (m_pOuterUnk)
m_pOuterUnk->AddRef();
return ++m_ulRefCount;
}
STDMETHODIMP_(ULONG) CStubsCX::Release(void)
{
ULONG ulRef;
if (m_pOuterUnk)
m_pOuterUnk->Release();
ulRef = --m_ulRefCount;
if (m_ulRefCount == 0) {
ApiApiPtr(api);
api->RemoveInstance(this);
delete this;
}
return ulRef;
}
void CStubsCX::AllConnectionsComplete(MWContext *pContext) {
#if defined(SMOOTH_PROGRESS)
PM_ReleaseProgressManager(pContext);
#endif
}
void CStubsCX::UpdateStopState(MWContext *pContext) {
}
void CStubsCX::BeginPreSection(MWContext *pContext) {
}
void CStubsCX::ClearCallNetlibAllTheTime(MWContext *pContext) {
}
void CStubsCX::ClearView(MWContext *pContext, int iView) {
}
XP_Bool CStubsCX::Confirm(MWContext *pContext, const char *pConfirmMessage) {
// We need to ask for confirmation from the user.
// Override if this isn't what you need.
CString csTitle = _T("");
if( pContext && pContext->bJavaScriptCalling )
{
MakeSecureTitle( this, csTitle );
}
else
{
csTitle = szLoadString( AFX_IDS_APP_TITLE );
}
int iStatus = GetDialogOwner()->MessageBox( pConfirmMessage, (LPCSTR)csTitle, MB_ICONQUESTION | MB_OKCANCEL );
return(iStatus == IDOK);
}
/*
* Run a "confirm" dialog with a checkbox
*/
BOOL CStubsCX::CheckConfirm(MWContext *pContext, const char *pMessage,
const char *pCheckMessage, const char *pOKMessage,
const char *pCancelMessage, XP_Bool *pChecked) {
CCheckConfirmDialog dialog(GetDialogOwner(), pMessage, pCheckMessage,
pOKMessage, pCancelMessage, *pChecked);
theApp.m_splash.SafeHide();
return dialog.DoModal(pChecked);
}
/*
* Run a dialog allowing selection from a list
*/
BOOL CStubsCX::SelectDialog(MWContext *pContext, const char *pMessage,
const char **pList, int16 *pCount) {
CUserSelectionDialog dialog(GetDialogOwner(), pMessage,
pList, *pCount);
theApp.m_splash.SafeHide();
return dialog.DoModal(pCount);
}
MWContext *CStubsCX::CreateNewDocWindow(MWContext *pContext, URL_Struct *pURL) {
return(NULL);
}
void CStubsCX::DisplayBullet(MWContext *pContext, int iLocation, LO_BullettStruct *pBullet) {
}
#ifndef MOZ_NGLAYOUT
void CStubsCX::DisplayEdge(MWContext *pContext, int iLocation, LO_EdgeStruct *pEdge) {
}
void CStubsCX::DisplayEmbed(MWContext *pContext, int iLocation, LO_EmbedStruct *pEmbed) {
}
void CStubsCX::DisplayBuiltin(MWContext *pContext, int iLocation, LO_BuiltinStruct *pBuiltin) {
}
void CStubsCX::DisplayFormElement(MWContext *pContext, int iLocation, LO_FormElementStruct *pFormElement) {
}
#endif
void CStubsCX::DisplayBorder(MWContext *pContext, int iLocation, int x, int y, int width, int height, int bw, LO_Color *color, LO_LineStyle style) {
}
void CStubsCX::DisplayFeedback(MWContext *pContext, int iLocation, LO_Element *pElement) {
}
void CStubsCX::DisplayHR(MWContext *pContext, int iLocation, LO_HorizRuleStruct *pHorizRule) {
}
void CStubsCX::DisplayLineFeed(MWContext *pContext, int iLocation, LO_LinefeedStruct *pLineFeed, XP_Bool clear) {
}
void CStubsCX::DisplaySubDoc(MWContext *pContext, int iLocation, LO_SubDocStruct *pSubDoc) {
}
void CStubsCX::DisplayCell(MWContext *pContext, int iLocation, LO_CellStruct *pCell) {
}
void CStubsCX::DisplaySubtext(MWContext *pContext, int iLocation, LO_TextStruct *pText, int32 lStartPos, int32 lEndPos, XP_Bool clear) {
}
void CStubsCX::DisplayTable(MWContext *pContext, int iLocation, LO_TableStruct *pTable) {
}
void CStubsCX::DisplayText(MWContext *pContext, int iLocation, LO_TextStruct *pText, XP_Bool clear) {
}
void CStubsCX::EraseBackground(MWContext *pContext, int iLocation, int32 x, int32 y, uint32 width, uint32 height, LO_Color *pColor) {
}
void CStubsCX::SetDrawable(MWContext *pContext, CL_Drawable *drawable)
{
}
void CStubsCX::EnableClicking(MWContext *pContext) {
}
void CStubsCX::EndPreSection(MWContext *pContext) {
}
int CStubsCX::FileSortMethod(MWContext *pContext) {
return(pContext->fileSort);
}
void CStubsCX::FinishedLayout(MWContext *pContext) {
}
#ifndef MOZ_NGLAYOUT
void CStubsCX::FormTextIsSubmit(MWContext *pContext, LO_FormElementStruct *pFormElement) {
}
void CStubsCX::FreeEdgeElement(MWContext *pContext, LO_EdgeStruct *pEdge) {
}
#endif
void CStubsCX::CreateEmbedWindow(MWContext *pContext, NPEmbeddedApp *pApp) {
}
void CStubsCX::SaveEmbedWindow(MWContext *pContext, NPEmbeddedApp *pApp) {
}
void CStubsCX::RestoreEmbedWindow(MWContext *pContext, NPEmbeddedApp *pApp) {
}
void CStubsCX::DestroyEmbedWindow(MWContext *pContext, NPEmbeddedApp *pApp) {
}
#ifndef MOZ_NGLAYOUT
void CStubsCX::FreeEmbedElement(MWContext *pContext, LO_EmbedStruct *pEmbed) {
}
void CStubsCX::FreeBuiltinElement(MWContext *pContext, LO_BuiltinStruct *pBuiltin) {
}
void CStubsCX::GetEmbedSize(MWContext *pContext, LO_EmbedStruct *pEmbed, NET_ReloadMethod Reload) {
}
void CStubsCX::GetFormElementInfo(MWContext *pContext, LO_FormElementStruct *pFormElement) {
}
void CStubsCX::GetFormElementValue(MWContext *pContext, LO_FormElementStruct *pFormElement, XP_Bool bHidden, XP_Bool bSubmit) {
}
#endif
void CStubsCX::GetTextFrame(MWContext *pContext, LO_TextStruct *pText,
int32 start, int32 end, XP_Rect *frame) {
}
int CStubsCX::GetTextInfo(MWContext *pContext, LO_TextStruct *pText, LO_TextInfo *pTextInfo) {
return(0);
}
void CStubsCX::GraphProgress(MWContext *pContext, URL_Struct *pURL, int32 lBytesReceived, int32 lBytesSinceLastTime, int32 lContentLength) {
}
void CStubsCX::GraphProgressDestroy(MWContext *pContext, URL_Struct *pURL, int32 lContentLength, int32 lTotalBytesRead) {
}
void CStubsCX::GraphProgressInit(MWContext *pContext, URL_Struct *pURL, int32 lContentLength) {
}
void CStubsCX::LayoutNewDocument(MWContext *pContext, URL_Struct *pURL, int32 *pWidth, int32 *pHeight, int32 *pmWidth, int32 *pmHeight) {
}
void CStubsCX::Progress(MWContext *pContext, const char *pMessage) {
}
char *CStubsCX::Prompt(MWContext *pContext, const char *pPrompt, const char *pDefault) {
// We need to prompt the user for their username.
// If this isn't what you need, override.
CDialogPRMT dlgPrompt(GetDialogOwner());
if( pContext && pContext->bJavaScriptCalling )
{
CString csTitle = _T("");
MakeSecureTitle( this, csTitle );
dlgPrompt.SetSecureTitle( csTitle );
}
theApp.m_splash.SafeHide();
return(dlgPrompt.DoModal(pPrompt, pDefault));
}
char *CStubsCX::PromptWithCaption(MWContext *pContext, const char *pCaption, const char *pPrompt, const char *pDefault) {
CDialogPRMT dlgPrompt(GetDialogOwner());
theApp.m_splash.SafeHide();
return dlgPrompt.DoModal(pPrompt, pDefault, pCaption);
}
char *CStubsCX::PromptPassword(MWContext *pContext, const char *pMessage) {
// We need to prompt the user for their password.
// If this isn't what you need, override.
CDialogPASS dlgPass(GetDialogOwner());
if( pContext && pContext->bJavaScriptCalling )
{
CString csTitle = _T("");
MakeSecureTitle( this, csTitle );
dlgPass.SetSecureTitle( csTitle );
}
theApp.m_splash.SafeHide();
return(dlgPass.DoModal(pMessage));
}
XP_Bool CStubsCX::PromptUsernameAndPassword(MWContext *pContext, const char *pMessage, char **ppUsername, char **ppPassword) {
// We need to prompt the user for their password and username.
// If this isn't what you need, override.
int iStatus;
CDialogUPass dlgUPass(GetDialogOwner());
CString csTitle = _T("");
if( pContext && pContext->bJavaScriptCalling )
{
CString csTitle = _T("");
MakeSecureTitle( this, csTitle );
dlgUPass.SetSecureTitle( csTitle );
}
theApp.m_splash.SafeHide();
iStatus = dlgUPass.DoModal((char *) pMessage, ppUsername, ppPassword);
return(iStatus == IDOK);
}
#ifndef MOZ_NGLAYOUT
void CStubsCX::ResetFormElement(MWContext *pContext, LO_FormElementStruct *pFormElement) {
}
#endif
void CStubsCX::SetBackgroundColor(MWContext *pContext, uint8 cRed, uint8 cGreen, uint8 cBlue) {
}
void CStubsCX::SetCallNetlibAllTheTime(MWContext *pContext) {
}
void CStubsCX::SetDocDimension(MWContext *pContext, int iLocation, int32 lWidth, int32 lLength) {
}
void CStubsCX::SetDocPosition(MWContext *pContext, int iLocation, int32 lX, int32 lY) {
}
void CStubsCX::SetDocTitle(MWContext *pContext, char *pTitle) {
}
#ifndef MOZ_NGLAYOUT
void CStubsCX::SetFormElementToggle(MWContext *pContext, LO_FormElementStruct *pFormElement, XP_Bool bToggle) {
}
#endif
void CStubsCX::SetProgressBarPercent(MWContext *pContext, int32 lPercent) {
}
XP_Bool CStubsCX::ShowAllNewsArticles(MWContext *pContext) {
return(FALSE);
}
char *CStubsCX::TranslateISOText(MWContext *pContext, int iCharset, char *pISOText) {
return(pISOText);
}
XP_Bool CStubsCX::UseFancyFTP(MWContext *pContext) {
// Go off the context settings.
// If this isnt' wanted, override.
return(pContext->fancyFTP);
}
XP_Bool CStubsCX::UseFancyNewsgroupListing(MWContext *pContext) {
// Go off the applications settings.
// If this isn't wanted, override.
// return(!strcmp(theApp.m_pFancyNews->GetCharValue(), "yes"));
// I don't think this is used anymore! -- jonm 1/2/97
return TRUE;
}
void CStubsCX::GetJavaAppSize(MWContext *pContext, LO_JavaAppStruct *pJava, NET_ReloadMethod Reload) {
}
void CStubsCX::DisplayJavaApp(MWContext *pContext, int iLocation, LO_JavaAppStruct *pJava)
{
}
void CStubsCX::FreeJavaAppElement(MWContext *pContext, LJAppletData *appletD)
{
}
void CStubsCX::HideJavaAppElement(MWContext *pContext,
LJAppletData *java_struct)
{
}
void CStubsCX::GetDocPosition(MWContext * pContext, int iLoc, int32 * pX, int32 * pY)
{
}
#ifdef TRANSPARENT_APPLET
/* java specific functions to allow delayed window creation and transparency */
void CStubsCX::HandleClippingView(MWContext *pContext, LJAppletData *appletD, int x, int y, int width, int height)
{
}
void CStubsCX::DrawJavaApp(MWContext *pContext, int iLocation, LO_JavaAppStruct *pJava)
{
}
#endif
// URL Exit Routines
void CStubsCX::GetUrlExitRoutine(URL_Struct *pUrl, int iStatus, MWContext *pContext) {
}
void CStubsCX::TextTranslationExitRoutine(PrintSetup *pTextFE) {
}
CFrameCX::CFrameCX(ContextType ctMyType, CFrameGlue *pFrame)
{
m_pFrame = pFrame;
m_cxType = ctMyType;
// No old progress;
m_lOldPercent = 0;
}
CFrameCX::~CFrameCX()
{
}
void CFrameCX::SetProgressBarPercent(MWContext *pContext, int32 lPercent) {
// Enusre the safety of the value.
if(lPercent < -1) {
lPercent = 0;
}
if(lPercent > 100) {
lPercent = 100;
}
if(lPercent == 0 || m_lOldPercent == lPercent) {
return;
}
m_lOldPercent = lPercent;
LPNSSTATUSBAR pIStatusBar = NULL;
LPCHROME pChrome = GetFrame()->GetChrome();
if(pChrome) {
pChrome->QueryInterface( IID_INSStatusBar, (LPVOID *) &pIStatusBar );
if ( pIStatusBar ) {
pIStatusBar->SetProgress(CASTINT(lPercent));
pIStatusBar->Release();
}
}
}
void CFrameCX::Progress(MWContext *pContext, const char *pMessage) {
LPNSSTATUSBAR pIStatusBar = NULL;
LPCHROME pChrome = GetFrame()->GetChrome();
if(pChrome) {
pChrome->QueryInterface( IID_INSStatusBar, (LPVOID *) &pIStatusBar );
if ( pIStatusBar ) {
pIStatusBar->SetStatusText(pMessage);
pIStatusBar->Release();
}
}
}
int32 CFrameCX::QueryProgressPercent() {
return m_lOldPercent;
}
void CFrameCX::StartAnimation()
{
LPCHROME pChrome = GetFrame()->GetChrome();
if(pChrome) {
pChrome->StartAnimation();
}
}
void CFrameCX::StopAnimation()
{
LPCHROME pChrome = GetFrame()->GetChrome();
if(pChrome) {
pChrome->StopAnimation();
}
}
void CFrameCX::AllConnectionsComplete(MWContext *pContext)
{
// Call the base.
CStubsCX::AllConnectionsComplete(pContext);
// Stop our frame's animation, if the main context of the frame is no longer busy.
if(GetFrame()->GetMainContext()) {
if(XP_IsContextBusy(GetFrame()->GetMainContext()->GetContext()) == FALSE) {
// Okay, stop the animation.
StopAnimation();
// Also, we can clear the progress bar now.
LPNSSTATUSBAR pIStatusBar = NULL;
LPCHROME pChrome = GetFrame()->GetChrome();
if(pChrome) {
pChrome->QueryInterface( IID_INSStatusBar, (LPVOID *) &pIStatusBar );
if ( pIStatusBar ) {
pIStatusBar->SetProgress(0);
pIStatusBar->Release();
}
}
}
}
}
CWnd *CFrameCX::GetDialogOwner() const {
return m_pFrame->GetFrameWnd();
}

View File

@ -1,99 +0,0 @@
/* -*- 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.
*/
#ifndef __Context_Stubs_H
// Avoid include redundancy
//
#define __Context_Stubs_H
// Purpose: Create a stub context class that will allow deriving contexts
// from the abstract context easier.
// Only derive from the stub context iff you context has a very limited
// implementation (such as no or little UI, no CDC, etc....).
// Required Includes
//
#include "cxabstra.h"
class CStubsCX : public CAbstractCX {
ULONG m_ulRefCount;
LPUNKNOWN m_pOuterUnk;
public:
// IUnknown Interface
STDMETHODIMP QueryInterface(REFIID,LPVOID *);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
// IContext Interface
// All this context does is define empty member functions
// from the abstract pure virtual class.
#define FE_DEFINE(funkage, returns, args) virtual returns funkage args;
#include "mk_cx_fn.h"
public:
// Other overridables we must define as stubs.
virtual void GetUrlExitRoutine(URL_Struct *pUrl, int iStatus, MWContext *pContext);
virtual void TextTranslationExitRoutine(PrintSetup *pTextFE);
#ifdef LAYERS
virtual BOOL HandleLayerEvent(CL_Layer * pLayer, CL_Event * pEvent)
{ return FALSE; }
virtual BOOL HandleEmbedEvent(LO_EmbedStruct *embed, CL_Event * pEvent)
{ return FALSE; }
#endif
virtual void UpdateStopState(MWContext *pContext);
public:
// Construction/destruction (sets context type).
CStubsCX();
CStubsCX(ContextType ctMyType, MWContextType XPType);
CStubsCX(LPUNKNOWN pOuterUnk);
CStubsCX(LPUNKNOWN pOuterUnk, ContextType ctMyType, MWContextType XPType);
~CStubsCX();
};
class CFrameCX: public CStubsCX {
private:
CFrameGlue *m_pFrame;
public:
CFrameCX(ContextType ctMyType, CFrameGlue *pFrame);
~CFrameCX();
// Progress helpers.
protected:
int32 m_lOldPercent;
public:
int32 QueryProgressPercent();
void SetProgressBarPercent(MWContext *pContext, int32 lPercent);
void StartAnimation();
void StopAnimation();
void Progress(MWContext *pContext, const char *pMessage);
void AllConnectionsComplete(MWContext *pContext);
CWnd *GetDialogOwner() const;
CFrameGlue *GetFrame() const { return m_pFrame; }
};
#endif // __Context_Stubs_H

File diff suppressed because it is too large Load Diff

View File

@ -1,493 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* 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.
*/
#ifndef __WindowContext_H
// Avoid include redundancy
//
#define __WindowContext_H
// Purpose: Provide an abstract context in a window visible on a screen.
// Comments: Ill named, as the window is actually a view.
// Must be derived from to become useful.
// Revision History:
// 06-25-95 created GAB
//
// Required Includes
//
#include "cxpane.h"
#include "frameglu.h"
#include "xp_core.h"
#include "xp_list.h"
#include "tooltip.h"
class CWinCX : public CPaneCX {
// The view makes a comeback for performance reasons.
// Leave at the top, forces crashers for bad casts in some cases.
private:
CGenericView *m_pGenView;
public:
CGenericView *GetView() { return m_pGenView; }
// Construct, Destruction, Indirect construction
public:
CWinCX(CGenericDoc *pDoc, CFrameGlue *pFrame, CGenericView *pView, MWContextType mwType = MWContextBrowser, ContextType cxType = Window);
~CWinCX();
virtual void DestroyContext();
virtual void Initialize(BOOL bOwnDC, RECT *pRect = NULL, BOOL bInitialPalette = TRUE, BOOL bNewMemDC = TRUE);
// Null frame handling (absence of a frame handling)
public:
static CNullFrame *m_pNullFrame;
static void *m_pExitCookie;
// The view/frame working with this context.
// We own a document (see CDCCX).
// The OLE friend mucks with this.
friend class CInPlaceFrame;
protected:
#ifdef DDRAW
LPDIRECTDRAW m_lpDD; // DirectDraw object
LPDIRECTDRAWSURFACE m_lpDDSPrimary; // DirectDraw primary surface
LPDIRECTDRAWSURFACE m_lpDDSBack; // DirectDraw back surface
LPDIRECTDRAWCLIPPER m_pClipper;
LPDIRECTDRAWCLIPPER m_pOffScreenClipper;
LPDIRECTDRAWPALETTE mg_pPal;
DDSURFACEDESC m_surfDesc;
BOOL m_ScrollWindow;
LTRB m_physicWinRect;
HDC m_offScreenDC;
#endif
CFrameGlue *m_pFrame;
XP_List* imageToolTip;
CNSToolTip *m_ToolTip;
LO_ImageStruct* pLastToolTipImg;
LO_AnchorData* m_pLastToolTipAnchor;
public:
CFrameGlue *GetFrame() const;
void ClearView();
void ClearFrame();
CNSToolTip* CreateToolTip(LO_ImageStruct* pImage, CPoint& point, CL_Layer *layer);
void RelayToolTipEvent(POINT pt, UINT message);
void ClipChildren(CWnd *pWnd, BOOL bSet);
// Palette Access
public:
virtual HPALETTE GetPalette() const;
#ifdef DDRAW
virtual int DisplayPixmap(NI_Pixmap* image, NI_Pixmap* mask, int32 x, int32 y, int32 x_offset, int32 y_offset, int32 width, int32 height, LTRB& Rect);
#endif
// CDC Access
public:
virtual HDC GetDispDC()
{
#ifdef DDRAW
if (m_offScreenDC) return m_offScreenDC;
else return GetContextDC();
#else
return GetContextDC();
#endif
}
#ifdef DDRAW
void CalcWinPos();
int GetWindowsXPos() {return (int)m_physicWinRect.left;}
int GetWindowsYPos() {return (int)m_physicWinRect.top;}
virtual void LockOffscreenSurfDC() { m_lpDDSBack->GetDC(&m_offScreenDC); }
virtual void ReleaseOffscreenSurfDC()
{ if (m_lpDDSBack) m_lpDDSBack->ReleaseDC(m_offScreenDC);}
void ReleaseDrawSurface();
void RestoreAllDrawSurface();
void ScrollWindow(int x, int y);
LPDIRECTDRAWCLIPPER GetClip() {return m_pClipper;}
LPDIRECTDRAWSURFACE GetPrimarySurface() {return m_lpDDSPrimary;}
LPDIRECTDRAWSURFACE GetBackSurface() {return m_lpDDSBack;}
LPDIRECTDRAW GetDrawObj() {return m_lpDD;}
LPDDSURFACEDESC GetSurfDesc() {return &m_surfDesc;}
void SetClipOnDrawSurface(LPDIRECTDRAWSURFACE surface, HRGN hClipRgn);
LPDIRECTDRAWSURFACE CreateOffscreenSurface(RECT& rect);
void CreateAndLockOffscreenSurface(RECT& rect);
void BltToScreen(LTRB& rect, DDBLTFX* fx = NULL);
#endif
void ResetToolTipImg();
// For dialogs
public:
virtual CWnd *GetDialogOwner() const;
// When in layout, we need a special case to detect if we need to reload the document
// if the user resizes the window.
protected:
BOOL m_bIsLayingOut; // Set in LayoutNewDocument and LayoutFinished
public:
BOOL IsLayingOut() const {
return(m_bIsLayingOut);
}
// Can we accept mouse clicks?
BOOL IsClickingEnabled() const;
// Cached mouse hits.
public:
CPoint m_cpLBDClick;
CPoint m_cpLBDown;
CPoint m_cpLBUp;
CPoint m_cpMMove;
CPoint m_cpRBDClick;
CPoint m_cpRBDown;
CPoint m_cpRBUp;
// Mouse state.
public:
enum MouseEvent {
m_None,
m_LBDClick,
m_LBDown,
m_LBUp,
m_MMove,
m_RBDClick,
m_RBDown,
m_RBUp
} m_LastMouseEvent;
UINT m_uMouseFlags;
BOOL m_bLBDown;
BOOL m_bLBUp;
// Timer processing.
public:
BOOL m_bScrollingTimerSet;
BOOL m_bMouseMoveTimerSet;
// Currently selected embedded item, or NULL on none.
public:
LO_EmbedStruct *m_pSelected;
// Last highlighted anchor, NULL if none.
protected:
LO_Element *m_pLastArmedAnchor;
// Window notifications.
// These are pretty much identical to MFC functions names with the added CX
protected:
virtual void AftWMSize(PaneMessage *pMessage);
public:
#ifdef EDITOR
virtual void Scroll(int iBars, UINT uSBCode, UINT uPos, HWND hCtrl, UINT uTimes = 1);
#endif
virtual void OnMoveCX();
virtual void OnDeactivateEmbedCX();
#ifdef LAYERS
virtual BOOL HandleLayerEvent(CL_Layer * pLayer, CL_Event * pEvent);
virtual BOOL HandleEmbedEvent(LO_EmbedStruct *embed, CL_Event * pEvent);
#endif /* LAYERS */
virtual void OnLButtonDblClkCX(UINT uFlags, CPoint cpPoint);
virtual void OnLButtonDownCX(UINT uFlags, CPoint cpPoint);
virtual void OnLButtonUpCX(UINT uFlags, CPoint cpPoint, BOOL &bReturnImmediately);
virtual void OnMouseMoveCX(UINT uFlags, CPoint cpPoint, BOOL &bReturnImmediately);
virtual void OnRButtonDblClkCX(UINT uFlags, CPoint cpPoint);
virtual void OnRButtonDownCX(UINT uFlags, CPoint cpPoint);
virtual void OnRButtonUpCX(UINT uFlags, CPoint cpPoint);
virtual BOOL OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
virtual BOOL OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);
#ifdef LAYERS
// These are the per-layer event handlers.
virtual void OnLButtonDblClkForLayerCX(UINT uFlags, CPoint& cpPoint,
XY& xyPoint, CL_Layer *layer);
virtual void OnLButtonDownForLayerCX(UINT uFlags, CPoint& cpPoint,
XY& xyPoint, CL_Layer *layer);
virtual void OnLButtonUpForLayerCX(UINT uFlags, CPoint& cpPoint,
XY& xyPoint, CL_Layer *layer, BOOL &bReturnImmediately);
virtual void OnMouseMoveForLayerCX(UINT uFlags, CPoint& cpPoint,
XY& xyPoint, CL_Layer *layer, BOOL &bReturnImmediately);
virtual BOOL OnRButtonDownForLayerCX(UINT uFlags, CPoint& cpPoint,
XY& xyPoint, CL_Layer *layer);
virtual void OnRButtonDblClkForLayerCX(UINT uFlags, CPoint& cpPoint,
XY& xyPoint, CL_Layer *layer);
virtual void OnRButtonUpForLayerCX(UINT uFlags, CPoint& cpPoint,
XY& xyPoint, CL_Layer *layer);
#endif /* LAYERS */
virtual void OnNcPaintCX();
virtual void OnNcCalcSizeCX(BOOL bCalcValidRects, NCCALCSIZE_PARAMS* lpncsp);
// This is used to track the window rect between OnSize
// messages. If the actual window rect has not
// changed, then expect that we do not need to
// redraw the view (InValidate/UpdateWindow).
private:
CRect m_crWindowRect;
public:
// Analogous to m_pLastArmedAnchor,
// remember an image we click on
// to do drag n drop to editor
// Public so the view can access it for
// copy-image-to-clipboard
LO_ImageStruct *m_pLastImageObject;
int32 RightMargin() {
return(m_lRightMargin);
}
// URL Retrieval.
public:
virtual int GetUrl(URL_Struct *pUrl, FO_Present_Types iFormatOut, BOOL bReallyLoad = TRUE, BOOL bForceNew = FALSE);
// Progress helpers.
protected:
int32 m_lOldPercent;
public:
int32 QueryProgressPercent();
void StartAnimation();
void StopAnimation();
// #ifdef EDITOR
// Test if screen point, such mouse cursor,
// is within a single selected region.
BOOL PtInSelectedRegion(CPoint cPoint, BOOL bConvertToDocCoordinates = FALSE, CL_Layer *layer = NULL);
BOOL PtInSelectedCell(CPoint &DocPoint, LO_CellStruct *cell,
BOOL &bContinue, LO_Element *start_element,
LO_Element *end_element);
// Flags used during drag/drop
BOOL m_bMouseInSelection;
// Drag current doc URL from the URL Bitmap to whatever
// destination accepts a Bookmark OLE struct or URL text
void DragCurrentURL();
void CopyCurrentURL();
void DragSelection();
// TRUE when we are dragging something from this context
BOOL m_bDragging;
// Browser doesn't need this, but Editor
// does to prevent errant mouse-over message
// which results in wrong cursor for right-button popup menu
BOOL m_bInPopupMenu;
LTRB m_rectSizing;
// Save the time when button goes down to allow
// 1-pixel resizing only if a time threshold
// has been exceeded
time_t m_StartSizingTime;
// Used only in Editor when dragging to select multiple cells
BOOL m_bSelectingCells;
public:
void CancelSizing();
BOOL IsDragging() { return(m_bDragging); }
// Targeted load operations.
public:
CWinCX *DetermineTarget(const char *pTarget);
// Saving what is currently in the frames location bar,
// so we don't go blowing it away.
protected:
CString m_csSaveLocationBarText;
// Funtion to get our view's offset into the frame window.
public:
void GetViewOffsetInFrame(CPoint& cpRetval) const;
// Function to tell the context it is now the active
// context in a frame.
private:
BOOL m_bActiveState;
public:
BOOL IsActive() const {
return(m_bActiveState);
}
void ActivateCX(BOOL bNowActive);
// Modality support.
public:
void GoModal(MWContext *pModalOver);
protected:
CPtrList m_cplModalOver;
// Close callback support.
private:
CPtrList m_cplCloseCallbacks;
CPtrList m_cplCloseCallbackArgs;
public:
void CloseCallback(void (*)(void *), void *);
// Resize and close disabling.
public:
void EnableResize(BOOL bEnable = TRUE);
void EnableClose(BOOL bEnable = TRUE);
// Wether or not our size was determined via chrome.
public:
BOOL m_bSizeIsChrome;
//Z order locking
void SetZOrder(BOOL bZLock = FALSE, BOOL bBottommost = FALSE);
void DisableHotkeys(BOOL bDisable = FALSE);
// Wether or not we attempt to draw a border.
private:
BOOL m_bHasBorder;
public:
void SetBorder(BOOL bBorder) {
m_bHasBorder = bBorder;
}
// How to correclty handle mouse entering element
// regions and reporting this to the backend.
// Note: The element pointers are not valid after relayout -
// must call ClearLastElemen() just before or after a relayout
protected:
BOOL m_bLastOverTextSet;
LO_Element *m_pLastOverElement;
LO_AnchorData *m_pLastOverAnchorData;
LO_Element *m_pStartSelectionCell;
//#ifndef NO_TAB_NAVIGATION
public :
void ClearLastElement() {m_pLastOverElement = NULL; m_pLastOverAnchorData = NULL; m_pStartSelectionCell = NULL;}
int32 getLastFocusAreaIndex();
LO_AnchorData *CWinCX::getLastFocusAnchorPointer();
char *CWinCX::getLastFocusAnchorStr();
LO_TabFocusData * CWinCX::getLastTabFocusData();
LO_Element *CWinCX::getLastTabFocusElement();
int CWinCX::invalidateSegmentedTextElement( LO_TabFocusData *pNextTabFocus, int forward );
void CWinCX::setFormElementTabFocus( LO_Element * pFormElement );
void CWinCX::invalidateElement( LO_Element *pElement );
BOOL CWinCX::setTabFocusNext( int forward ); // try myself and then siblings
BOOL CWinCX::setNextTabFocusInWin( int forward ); // only in myself
BOOL CWinCX::setTabFocusNextChild( MWContext *currentChildContext, int forward ); // as a parent, try other children
BOOL CWinCX::fireTabFocusElement( UINT nChar); // WPARAM vKey );
int CWinCX::setTextTabFocusDrawFlag( LO_TextStruct *pText, uint32 *pFlag );
int CWinCX::getImageDrawFlag(MWContext *context, LO_ImageStruct *pImage, lo_MapAreaRec **ppArea, uint32 *pFlag );
void CWinCX::DisplayFeedback(MWContext *pContext, int iLocation, LO_Element *pElement);
private :
void CWinCX::SetActiveWindow();
void CWinCX::setLastTabFocusElement( LO_TabFocusData *pNextTabFocus, int needSetFocus );
void CWinCX::SetMainFrmTabFocusFlag( int nn );
void CWinCX::ClearMainFrmTabFocusFlag( void );
private :
LO_TabFocusData m_lastTabFocus;
int m_isReEntry_setLastTabFocusElement; // to provent re-entry
BOOL SaveOleDocument();
//#endif /* NO_TAB_NAVIGATION */
public:
LO_AnchorData *GetAreaAnchorData(LO_Element *pElement);
void FireMouseOutEvent(BOOL bClearElement, BOOL bClearAnchor, int32 xVal, int32 yVal,
CL_Layer *layer);
void FireMouseOverEvent(LO_Element *pElement, int32 xVal, int32 yVal,
CL_Layer *layer);
// Misc MFC helpers.
public:
virtual void OpenFile();
virtual BOOL CanOpenFile();
virtual void SaveAs();
virtual BOOL CanSaveAs();
virtual void PrintContext();
virtual void Print();
virtual BOOL CanPrint(BOOL bPreview = FALSE);
virtual void AllFind(MWContext *pSearchContext = NULL);
virtual BOOL CanAllFind();
virtual void FindAgain();
virtual BOOL CanFindAgain() const { return(!theApp.m_csFindString.IsEmpty()); }
virtual BOOL DoFind(CWnd * pWnd, const char * pFindWhat, BOOL bMatchcase,
BOOL bSearchDown, BOOL bAlertOnNotFound);
virtual BOOL CanViewSource();
virtual void ViewSource();
virtual BOOL CanDocumentInfo();
virtual void DocumentInfo();
virtual BOOL CanFrameSource();
virtual void FrameSource();
virtual BOOL CanFrameInfo();
virtual void FrameInfo();
virtual BOOL CanGoHome();
virtual void GoHome();
virtual BOOL CanUploadFile();
virtual void UploadFile();
// Context Overrides
public:
virtual void LayoutNewDocument(MWContext *pContext, URL_Struct *pURL, int32 *pWidth, int32 *pHeight, int32 *pmWidth, int32 *pmHeight);
virtual void FinishedLayout(MWContext *pContext);
virtual void AllConnectionsComplete(MWContext *pContext);
virtual void UpdateStopState(MWContext *pContext);
virtual void SetDocTitle(MWContext *pContext, char *pTitle);
virtual void SetInternetKeyword(const char *keyword);
virtual void ClearView(MWContext *pContext, int iView);
virtual void CreateEmbedWindow(MWContext *pContext, NPEmbeddedApp *pApp);
virtual void SaveEmbedWindow(MWContext *pContext, NPEmbeddedApp *pApp);
virtual void RestoreEmbedWindow(MWContext *pContext, NPEmbeddedApp *pApp);
virtual void DestroyEmbedWindow(MWContext *pContext, NPEmbeddedApp *pApp);
virtual void DisplayJavaApp(MWContext *pContext, int iLocation, LO_JavaAppStruct *java_struct);
#ifdef TRANSPARENT_APPLET
virtual void HandleClippingView(MWContext *pContext, LJAppletData *appletD, int x, int y, int width, int height);
#endif
virtual void HideJavaAppElement(MWContext *pContext, LJAppletData * session_data);
virtual void SetDocDimension(MWContext *pContext, int iLocation, int32 lWidth, int32 lLength);
virtual void SetDocPosition(MWContext *pContext, int iLocation, int32 lX, int32 lY);
virtual void FreeJavaAppElement(MWContext *pContext, LJAppletData *appletD);
virtual void GetJavaAppSize(MWContext *pContext, LO_JavaAppStruct *java_struct, NET_ReloadMethod bReload);
virtual void DisplayText(MWContext *pContext, int iLocation, LO_TextStruct *pText, XP_Bool clear);
virtual void DisplaySubtext(MWContext *pContext, int iLocation, LO_TextStruct *pText, int32 lStartPos, int32 lEndPos, XP_Bool clear);
virtual void SetProgressBarPercent(MWContext *pContext, int32 lPercent);
virtual void Progress(MWContext *pContext, const char *pMessage);
#ifndef MOZ_NGLAYOUT
virtual void DisplayEdge(MWContext *pContext, int iLocation, LO_EdgeStruct *pEdge);
virtual void FreeEdgeElement(MWContext *pContext, LO_EdgeStruct *pEdge);
#endif
virtual void EnableClicking(MWContext *pContext);
// Misc draw helpers
public:
#ifdef EDITOR
virtual void PreWMErasebkgnd(PaneMessage *pMsg);
#endif
// Helper for erasing text structures
BOOL EraseTextBkgnd(HDC pDC, RECT&, LO_TextStruct*);
// Break out code in OnMouseMove handler so it can be used
// during dragging in the Editor
BOOL CheckAndScrollWindow(int32 xVal, int32 yVal, CL_Layer *layer, int32 iBorderThreshhold = 0);
};
// Global variables
//
// Macros
//
// Function declarations
//
#endif // __WindowContext_H

View File

@ -1,124 +0,0 @@
/* -*- 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.
*/
#include "stdafx.h"
#include "cxwin.h"
#include "cntritem.h"
#include "medit.h"
#include "button.h"
#include "fmbutton.h"
#include "gridedge.h"
#include "cxsave.h"
#include "netsvw.h"
#include "feembed.h"
#include "libevent.h"
#include "np.h"
#include "winclose.h"
#ifdef EDITOR
#include "edview.h"
#endif /* EDITOR */
void CWinCX::DisplayText(MWContext *pContext, int iLocation, LO_TextStruct *pText, XP_Bool iClear)
{
#ifdef EDITOR
CNetscapeEditView * pView;
#endif // EDITOR
BOOL bHideCaret = FALSE;
// If we're erasing a selection, do so now.
if(iClear) {
LTRB Rect;
if(ResolveElement(Rect, pText->x, pText->y, pText->x_offset, pText->y_offset,
pText->width, pText->height)) {
SafeSixteen(Rect);
RECT crRect;
::SetRect(&crRect,CASTINT(Rect.left), CASTINT(Rect.top), CASTINT(Rect.right), CASTINT(Rect.bottom));
HDC pDC = GetContextDC();
EraseTextBkgnd(pDC, crRect, pText);
ReleaseContextDC(pDC);
}
} else {
// Hide the editor's caret during drawing -- needed to avoid
// erasing character pixels by the caret
#ifdef EDITOR
pView = (CNetscapeEditView *)GetView();
if( pView && pView->IsEditor() && pView->m_caret.bEnabled && pView->m_caret.cShown ) {
pView->HideCaret();
pView->m_caret.cShown = 0;
bHideCaret = TRUE;
}
#endif // EDITOR
}
// Call the base.
//#ifndef NO_TAB_NAVIGATION
uint32 flag = 0;
setTextTabFocusDrawFlag( pText, &flag );
CDCCX::DisplayText(pContext, iLocation, pText, iClear, flag);
//#endif /* NO_TAB_NAVIGATION */
#ifdef EDITOR
if( bHideCaret ) {
pView->ShowCaret();
pView->m_caret.cShown = 1;
}
#endif // EDITOR
}
void CWinCX::DisplaySubtext(MWContext *pContext, int iLocation, LO_TextStruct *pText, int32 lStartPos, int32 lEndPos, XP_Bool iClear) {
#ifdef EDITOR
CNetscapeEditView * pView;
#endif // EDITOR
BOOL bHideCaret = FALSE;
// If we're erasing a selection, do so now.
if(iClear) {
LTRB Rect;
if(ResolveElement(Rect, pText, iLocation, lStartPos, lEndPos, iClear)) {
SafeSixteen(Rect);
RECT crRect;
::SetRect(&crRect, CASTINT(Rect.left), CASTINT(Rect.top), CASTINT(Rect.right), CASTINT(Rect.bottom));
HDC pDC = GetContextDC();
EraseTextBkgnd(pDC, crRect, pText);
ReleaseContextDC(pDC);
}
} else {
// Hide the editor's caret during drawing
#ifdef EDITOR
pView = (CNetscapeEditView *)GetView();
if( pView && pView->IsEditor() && pView->m_caret.bEnabled && pView->m_caret.cShown ) {
pView->HideCaret();
pView->m_caret.cShown = 0;
bHideCaret = TRUE;
}
#endif // EDITOR
}
// Call the base.
CDCCX::DisplaySubtext(pContext, iLocation, pText, lStartPos, lEndPos, iClear);
#ifdef EDITOR
if( bHideCaret ) {
pView->ShowCaret();
pView->m_caret.cShown = 1;
}
#endif // EDITOR
}

View File

@ -1,407 +0,0 @@
/* ****************************************************************************
*
* Copyright (c) 1995-1996 by CompuServe Incorporated, Columbus, Ohio
* All Rights Reserved
*
* Facility: CompuServe Distributed Authentication(DA) Facility
*
* Abstract
* This facility provides a means for authentication of users and services
* without compromising passphrases between them across the wire.
*
* Module
* This module defines the interfaces necessary for the DA process.
*
* Author
* Chris Fortier
*
* Notes
* DA is implemented as an in-process OLE server. To access the DA
* OLE server, the IDAProcess interface on an instance of the CLSID_DA
* object must be used. Using IDAProcess requires the client to implement
* the IDAPacket and optionally the IDAPassword interfaces. These
* interfaces are described below.
*
* The DA OLE server is self-registering, so be sure to (un)register the
* DA OLE server by using REGSVR32.EXE, or by accessing the exported
* (DllUnregisterServer)DllRegisterServer functions.
*
*/
#if !defined(__DAINTF_H__)
#define __DAINTF_H__
/* ****************************************************************************
*
* Name
* IDAPacket
*
* Purpose
* This interface must be implemented by clients who wish to access DA
* services. The interface is used to encapsulate a request or response
* during the DA process.
*
* Notes
* The implemented form of a packet could be an HTTP header. As the
* header representation varies (buffer, tree, etc.), an encapsulation is
* necessary. Terminology is as follows:
*
* Term Example
*
* Name Authorization:
* Value Remote-Passphrase
* SubName="SubValue" Realm="foo"
*
*/
#undef INTERFACE
#define INTERFACE IDAPacket
DECLARE_INTERFACE_(IDAPacket, IUnknown)
{
/* ************************************************************************
*
* HRESULT IDAPacket::AddNameValue
* (
* [IN] const TCHAR *pszName,
* [IN] const TCHAR *pszValue
* )
*
* This method adds a new name and value to the DA packet.
*
* Parameters
* pszName - Name to add.
* pszValue - Value to add.
*
* Return
* NOERROR - The name and value were added.
* E_FAIL - The name and value could not be added.
*
*/
STDMETHOD(AddNameValue)(THIS_
const TCHAR *pszName,
const TCHAR *pszValue) PURE;
/* ************************************************************************
*
* HRESULT IDAPacket::FindValue
* (
* [IN] const TCHAR *pszName,
* [IN] const TCHAR *pszSubName,
* [OUT OPTIONAL] const TCHAR *pszSubValue,
* [IN] DWORD cbSubValue
* )
*
* This method finds a value or subvalue given a packet header name and
* subname.
*
* Parameters
* pszName - Name of the header within which to search
* pszSubName - Subname to search for.
* pszValue - Points to a buffer for the returned (sub)value.
* cbSubValue - Size of the the return (sub)value buffer.
*
* Return
* NOERROR - The (sub)name was found.
* E_FAIL - The (sub)name could not be found.
*
*/
STDMETHOD(FindValue)(THIS_
const TCHAR *pszName,
const TCHAR *pszSubName,
TCHAR * pszValue,
DWORD cbValue) const PURE;
/* ************************************************************************
*
* HRESULT IDAPacket::ReplaceNameValue
* (
* [IN] const TCHAR *pszName,
* [IN] const TCHAR *pszValue
* )
*
* This method replaces an existing name and value in a DA packet.
*
* Parameters
* pszName - Name to append.
* pszValue - Value to append.
*
* Return
* NOERROR - The name and value were updated.
* E_FAIL - The name and value could not be updated.
*
* Notes
* The pszValue string may itself be composed of many subnames and
* subvalues.
*
*/
STDMETHOD(ReplaceNameValue)(THIS_
const TCHAR *pszName,
const TCHAR *pszValue) PURE;
};
/* ****************************************************************************
*
* Name
* IDAPassword
*
* Purpose
* This interface might be implemented by clients who wish to access DA
* services. The interface is used to perform transformations of passwords
* from text to 128 bit values.
*
* Notes
* It is an optional interface. Not implementing the interface causes
* authentications to fail if a user chooses a service with any password
* transformation parameters.
*
*/
#undef INTERFACE
#define INTERFACE IDAPassword
DECLARE_INTERFACE_(IDAPassword, IUnknown)
{
/* ************************************************************************
*
* HRESULT IDAProcess::Transform
* (
* [IN] const TCHAR * pszPassword,
* [IN] const TCHAR * pszCharSet,
* [IN] const TCHAR * pszConvCase,
* [IN] const TCHAR * pszHashFunc,
* [OUT] BYTE * pbPasswordXfrm
* )
*
* This method transforms a password from text to a 128 bit value.
*
* Parameters
* pszPassword - Password as entered by the user.
* pszCharSet - Service transformation character set.
* pszConvCase - Service transformation case conversion.
* pszHashFunc - Service transformation hash function.
* pbPasswordXfrm - Pointer to 128 bits for the password
* transformation.
*
* Return
* NOERROR - Password was successfully transformed to a 128 bit value.
* E_FAIL - Unable to transform the password.
*
* Notes
* If pszCharSet is "none", pszConvCase and pszHashFunc will be empty
* strings.
*
*/
STDMETHOD(Transform)(const TCHAR * pszPassword,
const TCHAR * pszCharSet,
const TCHAR * pszConvCase,
const TCHAR * pszHashFunc,
BYTE * pbPasswdXfrm) const PURE;
};
/* ****************************************************************************
*
* Name
* SDAAuthData
*
* Purpose
* Used to package the needed parameters for IDAProcess::OnAuthorize.
*
*/
struct SDAAuthData
{
const IDAPacket * pIDAPacketIn; // [IN] Server response DA packet.
const TCHAR * pszHost; // [IN] Host for the outgoing DA packet.
const TCHAR * pszURI; // [IN] URI for the outgoing DA packet.
const TCHAR * pszMethod; // [IN] Method for the outgoing DA packet.
IDAPacket * pIDAPacketOut; // [IN OUT] New request DA packet.
BOOL bShowDialog; // [IN] Display authentication dialog?
HWND hParent; // [IN OPTIONAL] Parent for authentication dialog.
TCHAR * pszUsername; // [IN OUT] User name.
WORD wMaxUsername; // [IN] Maximum user name length.
TCHAR * pszRealmname; // [IN OUT] Realm name.
TCHAR * pszPassword; // [IN OUT] Password.
WORD wMaxPassword; // [IN] Maximum password length.
const IDAPassword * pIDAPassword; // [IN OPTIONAL] Password transformation interface.
};
#define DA_MAXFIELD 64 // Maximum string parameter length.
/* ****************************************************************************
*
* Name
* IDAProcess
*
* Purpose
* This interface is implemented by the DA engine. It is the interface
* clients use to access DA services.
*
*/
#undef INTERFACE
#define INTERFACE IDAProcess
DECLARE_INTERFACE_(IDAProcess, IUnknown)
{
/* ************************************************************************
*
* HRESULT IDAProcess::Cheat
* (
* [IN] const TCHAR * pszHost,
* [IN] const TCHAR * pszURI,
* [IN] const TCHAR * pszMethod,
* [IN OUT] IDAPacket * pIDAPacket
* )
*
* This method performs DA cheating.
*
* Parameters
* pszHost - Name of the host to receive the outgoing request.
* pszURI - URI of the outgoing request.
* pszMethod - Method type of the outgoing request.
* pIDAPacket - DA packet representing an outgoing request.
*
* Return
* NOERROR - An Authorization header was added to the
* outgoing request DA packet.
* S_FALSE - Cheating failed, there is no DA cache
* information for the host.
* E_FAIL - Outgoing request DA packet could not be
* updated.
* E_INVALIDARG - A bad function parameter was passed, or the
* DA packet is not in the correct format, or IP
* information could not be obtained for the
* hostname.
* E_UNEXPECTED - Internal DA error.
*
*/
STDMETHOD(Cheat)(THIS_
const TCHAR * pszHost,
const TCHAR * pszURI,
const TCHAR * pszMethod,
IDAPacket * pIDAPacket) const PURE;
/* ************************************************************************
*
* HRESULT IDAProcess::On401Authenticate
* (
* [IN OUT] SDAAuthData *pDAAuthData
* )
*
* This method processes 401 WWW-Authenticate server response.
*
* Parameters
* pDAAuthData - Authorization parameters.
*
* Return
* NOERROR - Successfully added an Authorization header to
* the outgoing request DA packet.
* E_FAIL - The outgoing request DA packet could not be
* updated or IP information could not be obtained
* for the hostname.
* E_INVALIDARG - A bad function parameter was passed, or the
* DA packet is not in the correct format, or IP
* information could not be obtained for the
* hostname.
* E_UNEXPECTED - Internal DA error.
*
*/
STDMETHOD(On401Authenticate)(THIS_
SDAAuthData *pDAAuthData) const PURE;
/* ************************************************************************
*
* HRESULT IDAProcess::OnAuthenticate
* (
* [IN] const TCHAR * pszHost,
* [IN] const IDAPacket * pIDAPacket
* )
*
* This method processes 200 WWW-Authenticate server response.
*
* Parameters
* pszHost - Name of the host to receive the outgoing request.
* pIDAPacket - DA packet representing a server response.
*
* Return
* NOERROR - Successfully verified authentication.
* E_FAIL - Authentication verification failed.
* E_INVALIDARG - Bad function parameter was passed, or the DA
* packet is not in the correct format, or IP
* information could not be obtained for the
* hostname.
* E_UNEXPECTED - Internal DA error.
*
*/
STDMETHOD(On200Authenticate)(THIS_
const TCHAR * pszHost,
const IDAPacket * pIDAPacket) const PURE;
};
#endif // __DAINTF_H__
/* ****************************************************************************
*
* GUIDs
*
*/
// CLSID for the DA object {BCBD97D1-5F68-11CF-8370-000000000000}.
DEFINE_GUID(CLSID_DA,
0xBCBD97D1,
0x5F68,
0x11CF,
0x83,
0x70,
0x0,
0x0,
0x0,
0x0,
0x0,
0x0);
// IID for the IDAPacket interface {BCBD97D2-5F68-11CF-8370-000000000000}.
DEFINE_GUID(IID_IDAPacket,
0xBCBD97D2,
0x5F68,
0x11CF,
0x83,
0x70,
0x0,
0x0,
0x0,
0x0,
0x0,
0x0);
// IID for the IDAPassword interface {BCBD97D3-5F68-11CF-8370-000000000000}.
DEFINE_GUID(IID_IDAPassword,
0xBCBD97D3,
0x5F68,
0x11CF,
0x83,
0x70,
0x0,
0x0,
0x0,
0x0,
0x0,
0x0);
// IID for the IDAProcess interface {BCBD97D4-5F68-11CF-8370-000000000000}.
DEFINE_GUID(IID_IDAProcess,
0xBCBD97D4,
0x5F68,
0x11CF,
0x83,
0x70,
0x0,
0x0,
0x0,
0x0,
0x0,
0x0);

View File

@ -1,582 +0,0 @@
/* -*- 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.
*/
#include "stdafx.h"
#include "DateEdit.h"
#ifdef DEBUG_mitch
#define DEBUGONLY( stmt ) stmt;
#define DEBUGOUT(s) OutputDebugString(s)
#else
#define DEBUGONLY( stmt ) ;
#define DEBUGOUT(s)
#endif
#ifdef DEBUG
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define ID_DAY 101
#define ID_MONTH 102
#define ID_YEAR 103
static int _GetMonthDays(int nYear, int nMonth)
{
static int cDaysInMonth[] = {
31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
};
if( nYear % 100 != 0 && nYear % 4 == 0 && nMonth == 2)
return 29;
return cDaysInMonth[nMonth - 1];
}
/////////////////////////////////////////////////////////////////////////////
// CNSDateEdit public API
//=============================================================== CNSDateEdit
CNSDateEdit::CNSDateEdit()
{
m_bNeedControls = TRUE;
m_nDay = m_nMonth = m_nYear = 0;
m_iCurrentField = 0;
m_pFields[0] = m_pFields[1] = m_pFields[2] = NULL;
}
//============================================================== ~CNSDateEdit
CNSDateEdit::~CNSDateEdit()
{
}
//=================================================================== SetDate
BOOL CNSDateEdit::SetDate( CTime &d )
{
return SetDate( d.GetYear(), d.GetMonth(), d.GetDay() );
}
//=================================================================== SetDate
BOOL CNSDateEdit::SetDate( int nYear, int nMonth, int nDay )
{
m_nDay = nDay;
m_nMonth = nMonth;
m_nYear = nYear;
if ( !m_bNeedControls )
{
m_DayField.SetValue( m_nDay );
m_MonthField.SetValue( m_nMonth );
m_YearField.SetValue( m_nYear );
}
return TRUE;
}
//=================================================================== GetDate
BOOL CNSDateEdit::GetDate( CTime &d )
{
int nYear, nMonth, nDay;
if ( !GetDate( nYear, nMonth, nDay ) )
return FALSE;
d = CTime( nYear, nMonth, nDay, 0, 0, 0 );
return TRUE;
}
//=================================================================== GetDate
BOOL CNSDateEdit::GetDate( int &nYear, int &nMonth, int &nDay )
{
if (Validate()) {
nYear = m_nYear;
nMonth = m_nMonth;
nDay = m_nDay;
return TRUE;
}
return FALSE;
}
/////////////////////////////////////////////////////////////////////////////
// CNSDateEdit message handlers
BEGIN_MESSAGE_MAP(CNSDateEdit, CStatic)
ON_WM_PAINT()
ON_WM_SETFOCUS()
ON_WM_SIZE()
ON_WM_ENABLE()
ON_WM_GETDLGCODE()
ON_EN_MAXTEXT(ID_DAY, OnMaxText)
ON_EN_MAXTEXT(ID_MONTH, OnMaxText)
ON_EN_MAXTEXT(ID_YEAR, OnMaxText)
ON_EN_SETFOCUS(ID_DAY, OnFocusDay)
ON_EN_SETFOCUS(ID_MONTH, OnFocusMonth)
ON_EN_SETFOCUS(ID_YEAR, OnFocusYear)
ON_EN_KILLFOCUS(ID_DAY, OnKillFocusDay)
ON_EN_KILLFOCUS(ID_MONTH, OnKillFocusMonth)
ON_EN_KILLFOCUS(ID_YEAR, OnKillFocusYear)
ON_MESSAGE(NSDE_RELAYEVENT, OnRelayEvent)
END_MESSAGE_MAP()
//=================================================================== OnPaint
void CNSDateEdit::OnPaint()
{
ASSERT( IsWindow( m_hWnd ) );
char szSeparator[2];
#ifdef WIN32
VERIFY( GetLocaleInfo( LOCALE_USER_DEFAULT, LOCALE_SDATE, szSeparator, 2 ) == 2 );
#else
static char cName [] = "intl" ;
GetProfileString (cName, "sDate", "/", szSeparator, 2) ;
#endif
BOOL bEnabled = IsWindowEnabled();
CPaintDC dc(this);
CBrush winBrush( GetSysColor( bEnabled ? COLOR_WINDOW : COLOR_BTNFACE ) );
dc.FillRect( &dc.m_ps.rcPaint, &winBrush );
if ( m_bNeedControls )
CreateSubWindows( );
CFont *pOldFont = dc.SelectObject( CFont::FromHandle( (HFONT)::GetStockObject( ANSI_VAR_FONT ) ) );
int oldMode = dc.SetBkMode( TRANSPARENT );
COLORREF oldTextColor = dc.SetTextColor( GetSysColor( bEnabled ? COLOR_BTNTEXT : COLOR_GRAYTEXT ) );
dc.DrawText( szSeparator, -1, m_Sep1, DT_SINGLELINE | DT_CENTER | DT_VCENTER );
dc.DrawText( szSeparator, -1, m_Sep2, DT_SINGLELINE | DT_CENTER | DT_VCENTER );
dc.SelectObject( pOldFont );
dc.SetBkMode( oldMode );
dc.SetTextColor( oldTextColor );
}
void CNSDateEdit::OnSetFocus(CWnd* pOldWnd)
{
if ( m_bNeedControls )
CreateSubWindows( );
m_pFields[0]->SetFocus();
m_iCurrentField = 0;
}
void CNSDateEdit::OnSize( UINT nType, int cx, int cy )
{
if ( m_bNeedControls )
CreateSubWindows( );
if ( nType != SIZE_MINIMIZED ) {
RECT r;
::SetRect( &r, 0, 0, cx, cy );
LayoutSubWindows( &r );
}
}
void CNSDateEdit::OnEnable( BOOL bEnable )
{
if ( m_bNeedControls )
CreateSubWindows( );
m_YearField.EnableWindow( bEnable );
m_MonthField.EnableWindow( bEnable );
m_DayField.EnableWindow( bEnable );
CStatic::OnEnable( bEnable );
Invalidate();
}
/////////////////////////////////////////////////////////////////////////////
// CNSDateEdit protected & private methods
//========================================================== CreateSubWindows
void CNSDateEdit::CreateSubWindows( )
{
m_bNeedControls = FALSE;
RECT r, rcClient;
::SetRectEmpty(&r);
GetClientRect( &rcClient );
VERIFY( m_YearField.Create( WS_VISIBLE, r, this, (UINT)ID_YEAR ) );
m_YearField.LimitText( 4 );
if ( m_nYear != 0 )
m_YearField.SetValue( m_nYear );
VERIFY( m_MonthField.Create( WS_VISIBLE, r, this, (UINT)ID_MONTH ) );
m_MonthField.LimitText( 2 );
if ( m_nMonth != 0 )
m_MonthField.SetValue( m_nMonth );
VERIFY( m_DayField.Create( WS_VISIBLE, r, this, (UINT)ID_DAY ) );
m_DayField.LimitText( 2 );
if ( m_nDay != 0 )
m_DayField.SetValue( m_nDay );
m_wndSpin.Create(UDS_WRAP|UDS_ARROWKEYS|UDS_SETBUDDYINT|UDS_NOTHOUSANDS|WS_CHILD|WS_VISIBLE,
CRect(0,0,0,0), this, 104 );
LayoutSubWindows( &rcClient );
m_wndSpin.SetBuddy(m_pFields[0]);
if (m_pFields[0] == &m_DayField) {
int nDays = _GetMonthDays(m_nYear, m_nMonth);
m_wndSpin.SetRange(1, nDays);
m_wndSpin.SetPos(m_nDay);
} else if (m_pFields[0] == &m_MonthField) {
m_wndSpin.SetRange(1, 12);
m_wndSpin.SetPos(m_nMonth);
} else {
m_wndSpin.SetRange(1970, 2037);
m_wndSpin.SetPos(m_nMonth);
}
}
void CNSDateEdit::LayoutSubWindows( RECT *pRect )
{
HDC hDC = ::GetDC( m_hWnd );
ASSERT( hDC );
int w = pRect->right - pRect->left;
RECT r, rcSep, rcNum;
TCHAR szSeparator[2], szFormat[30], *s;
HFONT hFont = (HFONT)::GetStockObject( ANSI_VAR_FONT );
CFont *fontCur = CFont::FromHandle( hFont );
LOGFONT lf;
GetObject( hFont, sizeof(lf), &lf);
// Get locale info
#ifdef WIN32
VERIFY( GetLocaleInfo( LOCALE_USER_DEFAULT, LOCALE_SSHORTDATE, szFormat, 30 ) > 0 );
VERIFY( GetLocaleInfo( LOCALE_USER_DEFAULT, LOCALE_SDATE, szSeparator, 2 ) > 0 );
#else
static char cName [] = "intl" ;
GetProfileString (cName, "sDate", "/", szSeparator, 2) ;
int iDate = GetProfileInt (cName, "iDate", 0) ;
sprintf( szFormat, "%c%s%c%s%c",
iDate == 1 ? 'd' : iDate == 2 ? 'y' : 'M', szSeparator,
iDate == 1 ? 'M' : iDate == 2 ? 'M' : 'd', szSeparator,
iDate == 1 ? 'y' : iDate == 2 ? 'd' : 'y' );
#endif
// Get font info
::SetRectEmpty(&rcSep);
::SetRectEmpty(&rcNum);
DrawText( hDC, szSeparator, -1, &rcSep,
DT_NOCLIP | DT_NOPREFIX | DT_SINGLELINE | DT_CALCRECT );
DrawText( hDC, _T("0"), -1, &rcNum,
DT_NOCLIP | DT_NOPREFIX | DT_SINGLELINE | DT_CALCRECT );
ASSERT( w >= ( rcSep.right * 2 + rcNum.right * 8 ) );
// Start on the left
int iHeight = lf.lfHeight;
int iWidth = 0;
r.top = pRect->top - ((pRect->top-pRect->bottom)+iHeight)/2 - 1;
r.bottom = r.top + iHeight + 2;
r.right = pRect->left + 1;
// this loop parses the short date format, creating the fields as it goes
s = strtok( szFormat, szSeparator );
for( int i = 0; (i < 3) && (s != NULL); i++ )
{
switch ( s[0] )
{
case 'M':
case 'm':
r.left = r.right + 1;
r.right = r.left + rcNum.right * 2 + iWidth; // room for two characters
m_MonthField.MoveWindow( &r );
m_MonthField.SetFont( fontCur );
m_pFields[i] = &m_MonthField;
break;
case 'Y':
case 'y':
r.left = r.right + 1;
r.right = r.left + rcNum.right * 4 + iWidth; // room for four characters
m_YearField.MoveWindow( &r );
m_YearField.SetFont( fontCur );
m_pFields[i] = &m_YearField;
break;
case 'D':
case 'd':
r.left = r.right + 1;
r.right = r.left + rcNum.right * 2 + iWidth; // room for two characters
m_DayField.MoveWindow( &r );
m_DayField.SetFont( fontCur );
m_pFields[i] = &m_DayField;
break;
default:
DebugBreak();
}
if ( i == 0 )
{
r.left = r.right + 1;
r.right = r.left + rcSep.right;
m_Sep1 = r;
}
else if ( i == 1 )
{
r.left = r.right + 1;
r.right = r.left + rcSep.right;
m_Sep2 = r;
}
s = strtok( NULL, szSeparator );
}
r = *pRect;
r.left = r.right - GetSystemMetrics(SM_CXVSCROLL);
m_wndSpin.MoveWindow(&r);
::ReleaseDC( m_hWnd, hDC );
}
//================================================================ Validate
BOOL CNSDateEdit::Validate()
{
int nYear = m_YearField.GetValue();
int nMonth = m_MonthField.GetValue();
int nDay = m_DayField.GetValue();
BOOL res = TRUE;
if (nYear >= 1970 && nYear < 2038 && nMonth >= 1 && nMonth <= 12 && nDay >= 1 && nDay <= 31) {
CTime ctime(nYear, nMonth, nDay, 0, 0, 0);
res = (ctime.GetYear() == nYear) &&
(ctime.GetMonth() == nMonth) &&
(ctime.GetDay() == nDay);
} else {
res = FALSE;
}
if (res) {
m_nDay = nDay;
m_nMonth = nMonth;
m_nYear = nYear;
} else {
m_DayField.SetValue(m_nDay);
m_MonthField.SetValue(m_nMonth);
m_YearField.SetValue(m_nYear);
}
return res;
}
//================================================================ OnKeyPress
BOOL CNSDateEdit::OnKeyPress( UINT nKey, UINT nRepCnt, UINT nFlags )
{
if (nKey == VK_TAB || nKey == VK_SPACE)
{
// Don't move on to the next field/window if the current
// value is invalid.
if ( !Validate() )
{
MessageBeep( MB_OK );
m_pFields[m_iCurrentField]->SetSel( 0, -1 );
return TRUE;
}
// Move the focus to the next field or control
BOOL bShift = GetKeyState( VK_SHIFT ) & 0x8000;
if (bShift) {
if (m_iCurrentField > 0 || nKey == VK_SPACE)
m_iCurrentField += 2;
else
return FALSE;
} else {
if (m_iCurrentField < 2 || nKey == VK_SPACE)
m_iCurrentField += 1;
else
return FALSE;
}
m_iCurrentField %= 3;
m_pFields[m_iCurrentField]->SetFocus();
return TRUE; // handled
}
return FALSE; // not handled - let the child continue processing this key
}
//============================================================= OnMaxText
void CNSDateEdit::OnMaxText()
{
}
//============================================================= OnFocusDay
void CNSDateEdit::OnFocusDay()
{
int nDays = _GetMonthDays(m_nYear, m_nMonth);
for (int i = 0; i < 3; i++) {
if (m_pFields[i] == &m_DayField)
m_iCurrentField = i;
}
m_wndSpin.SetBuddy(&m_DayField);
m_wndSpin.SetRange(1, nDays);
m_wndSpin.SetPos(m_nDay);
}
//============================================================= OnFocusMonth
void CNSDateEdit::OnFocusMonth()
{
for (int i = 0; i < 3; i++) {
if (m_pFields[i] == &m_MonthField)
m_iCurrentField = i;
}
m_wndSpin.SetBuddy(&m_MonthField);
m_wndSpin.SetRange(1, 12);
m_wndSpin.SetPos(m_nMonth);
}
//============================================================= OnFocusYear
void CNSDateEdit::OnFocusYear()
{
for (int i = 0; i < 3; i++) {
if (m_pFields[i] == &m_YearField)
m_iCurrentField = i;
}
m_wndSpin.SetBuddy(&m_YearField);
m_wndSpin.SetRange(1970, 2037);
m_wndSpin.SetPos(m_nYear);
}
//============================================================= OnKillFocusDay
void CNSDateEdit::OnKillFocusDay()
{
if (!Validate()) {
MessageBeep( MB_OK );
}
}
//============================================================= OnKillFocusMonth
void CNSDateEdit::OnKillFocusMonth()
{
if (!Validate()) {
MessageBeep( MB_OK );
}
}
//============================================================= OnKillFocusYear
void CNSDateEdit::OnKillFocusYear()
{
if (!Validate()) {
MessageBeep( MB_OK );
}
}
LRESULT CNSDateEdit::OnRelayEvent(WPARAM wParam, LPARAM lParam)
{
LPMSG pMsg = (LPMSG) lParam;
if (pMsg->message == WM_KEYDOWN) {
return (LRESULT) OnKeyPress( (UINT) pMsg->wParam, (UINT) LOWORD(pMsg->lParam), (UINT) HIWORD(pMsg->lParam));
}
return (LRESULT) FALSE;
}
/////////////////////////////////////////////////////////////////////////////
// CNSDateSubedit
//============================================================ CNSDateSubedit
CNSDateSubedit::CNSDateSubedit()
{
}
//=========================================================== ~CNSDateSubedit
CNSDateSubedit::~CNSDateSubedit()
{
}
BOOL CNSDateSubedit::PreTranslateMessage( MSG* pMsg )
{
if (GetParent()->SendMessage(NSDE_RELAYEVENT, (WPARAM) 0, (LPARAM) pMsg))
return TRUE;
return CEdit::PreTranslateMessage(pMsg);
}
/////////////////////////////////////////////////////////////////////////////
// CNSDateSubedit message handlers
BEGIN_MESSAGE_MAP(CNSDateSubedit, CEdit)
ON_WM_CHAR()
ON_WM_SETFOCUS()
END_MESSAGE_MAP()
//==================================================================== OnChar
void CNSDateSubedit::OnChar( UINT nChar, UINT nRepCnt, UINT nFlags )
{
if ( ((nChar >= '0') && (nChar <= '9')) || (nChar == 0x08) ) {
CEdit::OnChar(nChar, nRepCnt, nFlags);
} else if (nChar == ' ') {
MSG msg;
msg.message = WM_KEYDOWN;
msg.wParam = (WPARAM) VK_SPACE;
GetParent()->SendMessage(NSDE_RELAYEVENT, (WPARAM) 0, (LPARAM) &msg);
} else {
MessageBeep( MB_OK );
}
}
//=============================================================== OnSetFocus
void CNSDateSubedit::OnSetFocus( CWnd* pOldWnd )
{
CEdit::OnSetFocus( pOldWnd );
SetSel(0,-1);
}
//================================================================== SetValue
int CNSDateSubedit::SetValue( int nNewValue )
{
char buff[10];
SetWindowText( itoa( nNewValue, buff, 10 ) );
return nNewValue;
}
//================================================================== GetValue
int CNSDateSubedit::GetValue( void )
{
char buff[10];
GetWindowText( buff, 10 );
if ( strlen( buff ) > 0 )
return atoi( buff );
return 0;
}

View File

@ -1,97 +0,0 @@
/* -*- 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.
*/
#ifndef _DateEdit_h
#define _DateEdit_h
// Requires
#include "widgetry.h"
/////////////////////////////////////////////////////////////////////////////
// CNSDateEdit window
class CNSDateSubedit : public CEdit
{
public:
CNSDateSubedit();
virtual ~CNSDateSubedit();
int SetValue( int nNewValue );
int GetValue( void );
protected:
BOOL PreTranslateMessage( MSG* pMsg );
afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
afx_msg void OnSetFocus(CWnd* pOldWnd);
DECLARE_MESSAGE_MAP()
};
#define NSDE_RELAYEVENT (WM_USER+1)
class CNSDateEdit: public CStatic
{
friend CNSDateSubedit;
public:
CNSDateEdit();
virtual ~CNSDateEdit();
BOOL SetDate( CTime &d );
BOOL SetDate( int nYear, int nMonth, int nDay );
// These two methods return FALSE if the current date is invalid
BOOL GetDate( CTime &d );
BOOL GetDate( int &nYear, int &nMonth, int &nDay );
protected:
void CreateSubWindows( );
void LayoutSubWindows( RECT *pRect );
BOOL OnKeyPress( UINT nKey, UINT nRepCnt, UINT nFlags );
BOOL Validate();
int m_nDay, m_nMonth, m_nYear;
BOOL m_bNeedControls;
CNSDateSubedit m_DayField;
CNSDateSubedit m_MonthField;
CNSDateSubedit m_YearField;
CNSDateSubedit *m_pFields[3];
CSpinButtonCtrl m_wndSpin;
int m_iCurrentField;
CRect m_Sep1;
CRect m_Sep2;
afx_msg void OnPaint();
afx_msg void OnSetFocus(CWnd* pOldWnd);
afx_msg void OnSize( UINT nType, int cx, int cy );
afx_msg void OnEnable( BOOL bEnable );
afx_msg void OnMaxText();
afx_msg void OnFocusDay();
afx_msg void OnFocusMonth();
afx_msg void OnFocusYear();
afx_msg void OnKillFocusDay();
afx_msg void OnKillFocusMonth();
afx_msg void OnKillFocusYear();
afx_msg LRESULT OnRelayEvent(WPARAM wParam, LPARAM lParam);
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
#endif

File diff suppressed because it is too large Load Diff

View File

@ -1,412 +0,0 @@
/* -*- 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.
*/
//Created Abe Jarrett: Most of the methods in this class were taken from
//Garrett's code in dde.cpp. This file is intended only as
//a means of detecting seconds instance criteria and handling processing
//of it and any command line content as well.
#include "stdafx.h"
#include "ddecmd.h"
#include "ddectc.h"
// Our DDE instance identifier.
DWORD CDDECMDWrapper::m_dwidInst;
// Wether or not DDE was successfully initialized.
BOOL CDDECMDWrapper::m_bDDEActive;
// Our array of hsz strings.
HSZ CDDECMDWrapper::m_hsz[CDDECMDWrapper::m_MaxHSZ];
// A list of all current conversations. The PtrToPtr map was used since
// the pointers are known to be 32 bits long, and the HCONV is a
// DWORD or possibly a pointer, and WordToPtr just wouldn't cut it
// with 16 bits and all.
// Sounds good to me!
CMapPtrToPtr CDDECMDWrapper::m_ConvList;
// Command filter for DDEML
DWORD CDDECMDWrapper::m_dwafCmd;
// Call back function for use with DDEML
FARPROC CDDECMDWrapper::m_pfnCallBack;
//This kicks it all off.
void DDEInitCmdLineConversation()
{
CDDECMDWrapper::m_pfnCallBack = NULL;
#ifdef XP_WIN16
// Find out if we can even use DDEML (must be in protected mode).
// Undoubtedly, this is the case since we must be in protected
// mode to use WINSOCK services, but just to be anal....
// GetWinFlags() has been removed in MSVC 2.0 and the analog doesn't
// look like it does the same thing. chouck 29-Dec-94
if(!(GetWinFlags() & WF_PMODE)) {
// Not in protected mode, can not continue with DDEML
return ;
}
#endif
// Set up our callback function to be registered with DDEML.
CDDECMDWrapper::m_pfnCallBack = (FARPROC)CmdLineDdeCallBack;
if(DdeInitialize(&CDDECMDWrapper::m_dwidInst,
(PFNCALLBACK)CDDECMDWrapper::m_pfnCallBack,
CDDECMDWrapper::m_dwafCmd, 0L)) {
// Unable to initialize, don't continue.
return ;
}
CDDECMDWrapper::m_bDDEActive = TRUE;
// Load in all HSZs.
// Unfortunately, there is really no good way to detect any errors
// on these string intializations, so let the blame land
// where it will if something fails.
CString strCS;
strCS.LoadString(IDS_DDE_CMDLINE_SERVICE_NAME);
CDDECMDWrapper::m_hsz[CDDECMDWrapper::m_ServiceName] =
DdeCreateStringHandle(CDDECMDWrapper::m_dwidInst,
(char *)(const char *)strCS, CP_WINANSI);
strCS.LoadString(IDS_DDE_PROCESS_CMDLINE);
CDDECMDWrapper::m_hsz[CDDECMDWrapper::m_ProcessCmdLine] =
DdeCreateStringHandle(CDDECMDWrapper::m_dwidInst,
(char *)(const char *)strCS, CP_WINANSI);
}
// Purpose: Construct a DDECMDWrapper object
// Arguments: hszService The name of the service we are handling.
// hszTopic The name of the topic we are handling.
// hConv The handle of the conversation we are
// handling.
// Returns: nothing
// Comments: Handles all created objects internally through a map.
// Revision History:
//
CDDECMDWrapper::CDDECMDWrapper(HSZ hszService, HSZ hszTopic, HCONV hConv)
{
// Set our members passed in.
m_hszService = hszService;
m_hszTopic = hszTopic;
m_hConv = hConv;
// Figure out our enumerated service number.
// We know this anyhow, we only have one service name at this
// point.
m_iService = m_ServiceName;
// Figure out our enumerated topic number.
m_iTopic = EnumTopic(hszTopic);
// Add ourselves to the current map of conversations.
m_ConvList.SetAt((void *)hConv, this);
}
// Purpose: Destory a CDDECMDWrapper object
// Arguments: void
// Returns: nothing
// Comments: Removes us from the internally handled list
// Revision History:
//
CDDECMDWrapper::~CDDECMDWrapper()
{
// Remove ourselves from the list of current conversations.
m_ConvList.RemoveKey((void *)m_hConv);
}
// Purpose: Connect to a service using a specific topic
// Arguments: cpService The service name of the DDE server
// hszTopic The topic of the conversation to the server
// Returns: CDDECMDWrapper * The conversation object if established,
// otherwise NULL.
// Comments: Generic connection establishment.
// Revision History:
// 01-05-95 created GAB
CDDECMDWrapper *CDDECMDWrapper::ClientConnect(const char *cpService,
HSZ& hszTopic)
{
CDDECMDWrapper *pConv = NULL;
// Make the service name into an HSZ.
HSZ hszService = DdeCreateStringHandle(m_dwidInst,
(char *) cpService,
CP_WINANSI);
if(hszService == NULL) {
return(NULL);
}
// Establish the connection.
HCONV hConv = DdeConnect(m_dwidInst, hszService, hszTopic, NULL);
if(hConv != NULL) {
// We have a connection, all that's left to do is to create
// a CDDECMDWrapper, we'll be creating it with the wrong
// service name of course, but client connections no
// longer really care about the service connection number,
// all they need is the conversation handle.
pConv = new CDDECMDWrapper(m_hsz[m_ServiceName], hszTopic, hConv);
}
// Free off our created hsz.
DdeFreeStringHandle(m_dwidInst, hszService);
return(pConv);
}
// Purpose: Figure out which wrapper is associated with a conversation.
// Arguments: hConv The conversation to find out about.
// Returns: CDDECMDWrapper * A pointer to the CDDECMDWrapper that is
// handling the conversation, or NULL
// if none is present.
// Comments: Shouldn't ever return NULL really.
// Revision History:
// 12-30-94 created GAB
// 12-04-96 reused by AJ. Probably not necessary, but you never know
// know when we may have to do more than one conversation.
CDDECMDWrapper *CDDECMDWrapper::GetConvObj(HCONV hConv)
{
// Query our static map of conversations for the object.
void *pWrap;
if(m_ConvList.Lookup((void *)hConv, pWrap) == 0) {
return(NULL);
}
return((CDDECMDWrapper *)pWrap);
}
// Purpose: Return the offset of the hsz topic string in our static
// m_hsz array
// Arguments: hsz The HSZ string to find in our array
// Returns: int The offset into the array, also correlating to
// it's enumerated value. If not found, the
// returned failure value is 0.
// Comments: Mainly coded to remove redundant lookups. Modularity...
// Revision History:
// 12-30-94 created GAB
// 12-04-96 reused by AJ. Probably not necessary, but you never know
// know when we may have to handle more than one topic.
int CDDECMDWrapper::EnumTopic(HSZ& hsz)
{
int i_retval = 0;
int i_counter;
// Just start looking for the HSZ string in our static array.
for(i_counter = m_TopicStart; i_counter < m_MaxHSZ; i_counter++)
{
if(m_hsz[i_counter] == hsz) {
i_retval = i_counter;
break;
}
}
return(i_retval);
}
HDDEDATA
CALLBACK
#ifndef XP_WIN32
_export
#endif
CmdLineDdeCallBack(UINT type, UINT fmt,
HCONV hconv, HSZ hsz1, HSZ hsz2, HDDEDATA hData, DWORD dwData1,
DWORD dwData2)
{
// Depending on the class of transaction, we return different data.
if(type & XCLASS_BOOL) {
// Must return (HDDEDATA)TRUE or (HDDEDATA)FALSE
switch(type) {
case XTYP_CONNECT: {
// We are the server.
// A client call the DdeConnect specifying a service and
// topic name which we support.
HSZ& hszTopic = hsz1;
HSZ& hszService = hsz2;
// Deny the connection if the service name is not the
// one we are taking connections for.
if(hszService !=
CDDECMDWrapper::m_hsz[CDDECMDWrapper::m_ServiceName]) {
return((HDDEDATA)FALSE);
}
// Now, the topic can be NULL, or it can be any one of our
// topic names to be accepted.
if(hszTopic == NULL) {
return((HDDEDATA)TRUE);
}
// Go through all our topics, see if we match.
if(0 != CDDECMDWrapper::EnumTopic(hszTopic)) {
return((HDDEDATA)TRUE);
}
// Topic not supported
return((HDDEDATA)FALSE);
}
default:
// unknown
return((HDDEDATA)FALSE);
}
// Break handled here
return((HDDEDATA)FALSE);
}
else if(type & XCLASS_DATA) {
// Must return DDE data handle, CBR_BLOCK, or NULL
return(NULL);
}
else if(type & XCLASS_FLAGS) {
// Must return DDE_FACK, DDE_BUSY, or DDE_FNOTPROCESSED
switch(type) {
case XTYP_ADVDATA: {
// We are the client.
// The server gave us a data handle.
break;
}
case XTYP_EXECUTE: {
// We are the server.
// A client said XTYP_EXECUTE in DdeClientTransaction
// If we are currently not fully initialized, we must ignore
// the request, but acknowledge it nonetheless.
if(theApp.m_bInInitInstance) {
return (HDDEDATA)DDE_FACK;
}
HDDEDATA& hDataExecute = hData;
char *pData = (char *)DdeAccessData(hDataExecute, NULL);
char szCmd[_MAX_PATH+12];
strcpy ( szCmd, "[cmdline(\"" );
strcat ( szCmd, pData );
strcat ( szCmd, "\")]" );
BOOL bRetval = theApp.OnDDECommand(szCmd);
DdeUnaccessData(hDataExecute);
return((HDDEDATA) bRetval);
}
default:
// unknown
return(DDE_FNOTPROCESSED);
}
// Break handled here
return(DDE_FNOTPROCESSED);
}
else if(type & XCLASS_NOTIFICATION) {
// Must return NULL, as the return value is ignored
switch(type) {
case XTYP_ADVSTOP: {
// We are the server
// A client said XTYP_ADVSTOP in DdeClientTransaction
break;
}
case XTYP_CONNECT_CONFIRM: {
// We are the server.
// We returned 1 to a XTYP_CONNECT transaction.
// This callback is mainly to inform us of the conversation
// handle that now exists, but we will actually be
// creating an instance of an object to handle this
// conversation from now on.
HSZ& hszTopic = hsz1;
HSZ& hszService = hsz2;
// Create the object, correctly initialized so that
// it understands the service, topic, and conversation
// it is handling.
// It will add itself to the conversation list.
CDDECMDWrapper *pObject = new CDDECMDWrapper(hszService, hszTopic,
hconv);
break;
}
case XTYP_DISCONNECT: {
// We are either client/server
// The partner in the conversation called DdeDisconnect
// causing both client/server to receive this.
// Find out which conversation object we are dealing with.
CDDECMDWrapper *pWrapper = CDDECMDWrapper::GetConvObj(hconv);
// Simply delete it.
// The object takes care of removing itself from the list.
if(pWrapper != NULL) {
delete pWrapper;
}
break;
}
case XTYP_ERROR: {
// We are either client/server
// A serious error has occurred.
// DDEML doesn't have any resources left to guarantee
// good communication.
break;
}
case XTYP_REGISTER: {
// We are either client/server
// A server application used DdeNameService to register
// a new service name.
break;
}
case XTYP_UNREGISTER: {
// We are either client/server
// A server applciation used DdeNameService to unregister
// an old service name.
break;
}
case XTYP_XACT_COMPLETE: {
// We are the client
// An asynchronous tranaction, sent when the client specified
// the TIMEOUT_ASYNC flag in DdeClientTransaction has
// concluded.
break;
}
default:
// unknown
return(NULL);
}
return(NULL);
}
// Unknown class type
return(NULL);
}

Some files were not shown because too many files have changed in this diff Show More