gecko-dev/cmd/macfe/prefs/MailNewsMediators.h

469 строки
13 KiB
C++

/* -*- 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.
*/
#pragma once
#include "CPrefsMediator.h"
#include "MPreference.h"
#include "UNewFolderDialog.h"
#include <LGADialogBox.h>
class CTSMEditField;
class LGACheckbox;
class MSG_IMAPHost;
class MSG_Host;
class CDragOrderTextList;
class StDialogHandler;
//======================================
#pragma mark
class CMailNewsIdentityMediator : public CPrefsMediator
//======================================
{
private:
typedef CPrefsMediator Inherited;
public:
enum { class_ID = PrefPaneID::eMailNews_Identity };
CMailNewsIdentityMediator(LStream*);
virtual ~CMailNewsIdentityMediator() {};
virtual void ListenToMessage(MessageT inMessage, void *ioParam);
virtual void UpdateFromIC();
virtual void LoadPrefs();
};
#ifdef MOZ_MAIL_NEWS
//======================================
#pragma mark
class CMailNewsMessagesMediator : public CPrefsMediator
//======================================
{
private:
typedef CPrefsMediator Inherited;
public:
enum { class_ID = PrefPaneID::eMailNews_Messages };
CMailNewsMessagesMediator(LStream*);
virtual ~CMailNewsMessagesMediator() {}
virtual void LoadMainPane();
static Boolean WrapLinesValidationFunc(CValidEditField *wrapLines);
};
//======================================
#pragma mark
class CMailNewsOutgoingMediator : public CPrefsMediator
//======================================
{
private:
typedef CPrefsMediator Inherited;
public:
enum { class_ID = PrefPaneID::eMailNews_Outgoing };
CMailNewsOutgoingMediator(LStream*);
virtual ~CMailNewsOutgoingMediator();
virtual void LoadPrefs();
virtual void WritePrefs();
virtual void ListenToMessage(MessageT inMessage, void* ioParam);
protected:
void FixCaptionNameForFCC(UFolderDialogs::FolderKind kind, const char* mailOrNews);
void FixCaptionNameForFCC(UFolderDialogs::FolderKind kind, const char* mailOrNews,
Boolean onServer);
protected:
char* mFolderURL[UFolderDialogs::num_kinds];
// indexed by UFolderDialogs::FolderKind
#ifdef HORRIBLE_HACK
Boolean mFolderIsDefault[UFolderDialogs::num_kinds]; // HACK
#endif // HORRIBLE_HACK
}; // class CMailNewsOutgoingMediator
//======================================
#pragma mark
class MServerListMediatorMixin
// Common code for a pane containing a list of servers
//======================================
{
protected:
MServerListMediatorMixin(CPrefsMediator* inMediatorSelf)
: mMediatorSelf(inMediatorSelf)
, mServerTable(nil)
, mServersLocked(false)
, mServersDirty(false)
{}
// note that if you add members to this in inheriting classes,
// you need to change the constructor resources to increase the
// list data size
struct CellContents
{
CellContents(const char* inName = nil)
: description(inName) {}
CStr255 description;
};
Boolean GetHostFromRow(
TableIndexT inRow,
CellContents& outCellData,
UInt32 inDataSize) const;
Boolean GetHostFromSelectedRow(
CellContents& outCellData,
UInt32 inDataSize) const;
Boolean HostExistsElsewhereInTable(
const CStr255& inHostName,
TableIndexT &outFoundRow) const;
void SetHostDataForRow(
TableIndexT inRow,
const CellContents& inCellData,
UInt32 inDataSize) const;
void AppendNewRow(
const CellContents &inCellData,
Uint32 inDataSize,
Boolean inRefresh = true);
void DeleteSelectedRow(
Boolean inRefresh = true);
void UpdateSelectedRow(
const CellContents &inCellData,
Uint32 inDataSize,
Boolean inRefresh = true);
virtual TableIndexT CountRows();
virtual void UpdateButtons();
virtual void AddButton() = 0;
virtual void EditButton() = 0;
virtual void DeleteButton() = 0;
void ClearList();
virtual void LoadList() = 0;
virtual void WriteList() = 0;
virtual Boolean Listen(MessageT inMessage, void *ioParam);
void LoadMainPane();
static Boolean ServerIsInCommaSeparatedList(const char *inServerName, const char *inServerList);
CPrefsMediator* mMediatorSelf;
CDragOrderTextList* mServerTable;
Boolean mServersLocked;
Boolean mServersDirty;
}; // class MServerListMediatorMixin
//======================================
#pragma mark
class CServerListMediator
//======================================
: public CPrefsMediator
, public MServerListMediatorMixin
{
public:
CServerListMediator(PaneIDT inMainPaneID);
virtual void ListenToMessage(MessageT inMessage, void *ioParam);
virtual void LoadMainPane();
};
//======================================
#pragma mark
class CMailNewsMailServerMediator
//======================================
: public CServerListMediator
{
private:
typedef CServerListMediator Inherited;
public:
enum { class_ID = PrefPaneID::eMailNews_MailServer };
CMailNewsMailServerMediator(LStream*);
virtual ~CMailNewsMailServerMediator();
virtual void UpdateFromIC();
virtual void LoadMainPane();
virtual void LoadPrefs();
virtual void WritePrefs();
static Boolean NoAtSignValidationFunc(CValidEditField *noAtSign);
static Boolean ValidateServerName(const CStr255& inServerName, Boolean inNewServer, const CServerListMediator* inServerList);
private:
enum ServerType
{
eUnknownServerType = -1,
ePOPServer = 0,
eIMAPServer = 1
};
Boolean UsingPop() const; // Hope this goes away.
void NoteServerChanges(Boolean inPOP, const CStr255& inServerName);
void SetPOPServerName(const CStr255& inName);
void GetPOPServerName(CStr255& outName) const;
// MServerListMediatorMixin overrides
struct CellContents : public MServerListMediatorMixin::CellContents
{
CellContents() {}
CellContents(const char* inName)
: MServerListMediatorMixin::CellContents(inName) {}
};
virtual void AddButton();
virtual void EditButton();
virtual void DeleteButton();
virtual void LoadList();
virtual void WriteList();
// Data
protected:
ServerType mServerType;
#ifdef BEFORE_INVISIBLE_POPSERVER_NAME_EDITFIELD_TRICK_WAS_THOUGHT_OF
char* mPopServerName;
#endif
}; // class CMailNewsMailServerMediator
//======================================
#pragma mark
class CMailNewsNewsServerMediator
//======================================
: public CServerListMediator
{
private:
typedef CServerListMediator Inherited;
public:
enum { class_ID = PrefPaneID::eMailNews_NewsServer };
CMailNewsNewsServerMediator(LStream*);
virtual ~CMailNewsNewsServerMediator() {};
virtual void UpdateFromIC();
virtual void LoadPrefs();
virtual void WritePrefs();
static Boolean PortNumberValidationFunc(CValidEditField *portNumber);
// MServerListMediatorMixin overrides
struct CellContents : public MServerListMediatorMixin::CellContents
{
CellContents() {}
CellContents(const char* inName, MSG_Host* inHost)
: MServerListMediatorMixin::CellContents(inName)
, serverData(inHost) {}
MSG_Host* serverData;
};
virtual void AddButton();
virtual void EditButton();
virtual void DeleteButton();
virtual void LoadList();
virtual void WriteList();
enum
{
eNNTPStandardPort = 119,
eNNTPSecurePort = 563
};
private:
Boolean mNewsServerPortLocked;
}; // class CMailNewsNewsServerMediator
struct DIR_Server;
class LTextColumn;
//======================================
#pragma mark
class CMailNewsDirectoryMediator
//======================================
: public CServerListMediator
{
private:
typedef CServerListMediator Inherited;
public:
enum { class_ID = PrefPaneID::eMailNews_Directory };
CMailNewsDirectoryMediator(LStream*);
virtual ~CMailNewsDirectoryMediator() {};
virtual void LoadMainPane();
virtual void LoadPrefs();
virtual void WritePrefs();
virtual Boolean ObeyCommand ( CommandT inCommand, void* ioParam );
private:
// MServerListMediatorMixin overrides
virtual void AddButton();
virtual void EditButton();
virtual void DeleteButton();
virtual void LoadList(); // only call this once, on creating the list for the first time
virtual void WriteList();
virtual void UpdateButtons();
Boolean IsPABServerSelected(LTextColumn *serverTable = nil);
Boolean IsPABServerSelected(DIR_Server *server);
struct CellContents : public MServerListMediatorMixin::CellContents
{
CellContents(const char* inName = nil)
: MServerListMediatorMixin::CellContents(inName)
, serverData(nil) {}
DIR_Server *serverData;
};
XP_List *mDeletedServerList;
}; // class CMailNewsDirectoryMediator
//======================================
#pragma mark
class COfflineNewsMediator : public CPrefsMediator
//======================================
{
private:
typedef CPrefsMediator Inherited;
public:
enum { class_ID = PrefPaneID::eOffline_News };
COfflineNewsMediator(LStream*);
virtual ~COfflineNewsMediator() {};
virtual void LoadMainPane();
// virtual void WritePrefs();
virtual void ListenToMessage(
MessageT inMessage,
void *ioParam);
static Boolean SinceDaysValidationFunc(CValidEditField *sinceDays);
}; // class COfflineNewsMediator
#ifdef MOZ_MAIL_NEWS
//======================================
#pragma mark
class CMailNewsAddressingMediator
//======================================
: public CPrefsMediator
{
private:
typedef CPrefsMediator Inherited;
public:
enum { class_ID = PrefPaneID::eMailNews_Addressing, eDirectoryPopup = 'DrPu' };
CMailNewsAddressingMediator(LStream* ): CPrefsMediator( class_ID ), mLDAPList(NULL) {};
virtual ~CMailNewsAddressingMediator()
{
if( mLDAPList )
XP_ListDestroy( mLDAPList );
};
virtual void LoadPrefs();
virtual void WritePrefs();
protected:
XP_List* mLDAPList;
};
#endif // MOZ_MAIL_NEWS
//======================================
class CLDAPServerPropDialog : public LGADialogBox
// This class brings up a dialog for editing the LDAP Server properties (duh). This has
// to be a derivative of LGADialogBox and not just a normal stack-based dialog because
// we want NetHelp to actually get the message to load the help URL while the dialog is up,
// not after you close it, and the stack-based dialogs never returned to the event loop
// to allow the url processing.
//
// The dialog passes the OK/Cancel messages through to the preference pane so the pane can
// handle doing the right thing and close out the dialog. They should be handled in
// ObeyCommand()
//======================================
{
typedef LGADialogBox Inherited;
public:
// PUBLIC CONSTANTS
enum {
class_ID = 'LDSP',
eLDAPServerPropertiesDialogResID = 12002,
cmd_OKButton = -128,
cmd_CancelButton = -129,
cmd_HelpButton = 3
};
enum { eEditServer = false, eNewServer = true } ;
// PUBLIC METHODS
CLDAPServerPropDialog ( LStream* inStream );
virtual ~CLDAPServerPropDialog() ;
virtual void FinishCreateSelf();
virtual void ListenToMessage ( MessageT inMessage, void* ioParam );
void SetUpDialog( DIR_Server* inServer, Boolean inNew, Boolean inIsPAB,
Boolean inIsAllLocked );
DIR_Server* GetServer ( ) { return mServer; } ;
Boolean IsEditingNewServer ( ) { return mNewServer; } ;
protected:
// Port ID's
enum {
eLDAPStandardPort = 389,
eLDAPSecurePort = 636
};
// Pane ID's for dialog
enum {
eDescriptionEditField = 10,
eLDAPServerEditField,
eSearchRootEditField,
ePortNumberEditField,
eMaxHitsEditField,
eSecureBox = 20,
eSaveLDAPServerPasswordBox = 21,
eUpdateButton = 22,
eDownloadCheckBox = 23
};
static Boolean MaxHitsValidationFunc(CValidEditField *maxHits) ;
static Boolean PortNumberValidationFunc(CValidEditField *portNumber) ;
const char* mHelpTopic; // help string for NetHelp
DIR_Server* mServer; // the LDAP server
Boolean mNewServer; // true if a new entry, false if editing existing
Boolean mIsPAB; // ???
CTSMEditField* mDescription; // Items in dialog
LEditField* mLdapServer;
LEditField* mSearchRoot;
CValidEditField* mPortNumber;
CValidEditField* mMaxHits;
LGACheckbox* mSecureBox;
LGACheckbox* mSavePasswordBox;
LGACheckbox* mDownloadCheckBox;
}; // class CLDAPServerPropDialog
#endif // MOZ_MAIL_NEWS